windows系统cmake生成c++动态库无lib文件解决方法 && bat文件批处理cmd命令

这篇具有很好参考价值的文章主要介绍了windows系统cmake生成c++动态库无lib文件解决方法 && bat文件批处理cmd命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作为cmake初学者,在windows系统下使用cmake生成c++动态库时出现了下图所示问题,是关于lib文件的。找了一圈,也没发现生成有lib文件。windows系统cmake生成c++动态库无lib文件解决方法 && bat文件批处理cmd命令
在google上查,才发现windows系统下动态库生成lib文件,还需要添加以下命令:

#windows系统动态库生成lib文件命令
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

生成动态库Demo(链接在此)

  1. 文件目录架构:
    ——源文件目录
    ——hello-world.cpp
    ——CMakeLists.txt
    ——message
    ——|——Message.cpp
    ——|——CMakeLists.txt
    ——|——include
    ————|——Message.hpp

库源码文件在message目录,其中新建了文件夹include放置头文件Message.hpp。
库文件的CMakeLists.txt:

# set minimum cmake version
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)

# project name and language
project(recipe-03 LANGUAGES CXX)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

#配置编译后的输出路径
 # 设定动态链接库的存储路径
 SET(LIBRARY_OUTPUT_PATH  ${CMAKE_CURRENT_LIST_DIR}/../bin)

# generate a library from sources
add_library(message
  SHARED
    Message.cpp
  )

target_include_directories(message PUBLIC ./include)

Message库源代码:

Message.hpp

#pragma once

#include <iosfwd>
#include <string>

class Message {
public:
  Message(const std::string &m) : message_(m) {}

  friend std::ostream &operator<<(std::ostream &os, Message &obj) {
    return obj.printObject(os);
  }

private:
  std::string message_;
  std::ostream &printObject(std::ostream &os);
};

Message.cpp

#include "Message.hpp"

#include <iostream>
#include <string>

std::ostream &Message::printObject(std::ostream &os) {
  os << "This is my very nice message: " << std::endl;
  os << message_;

  return os;
}

主CMakeLists.txt

# set minimum cmake version
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)

# project name and language
project(recipe-03 LANGUAGES CXX)

# generate a library from sources
add_subdirectory(./message)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG  ${CMAKE_CURRENT_LIST_DIR}/Bin/Debug)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE  ${CMAKE_CURRENT_LIST_DIR}/Bin/Release)
set(CMAKE_ARCHIEVE_OUTPUT_DIRECTORY_DEBUG  ${CMAKE_CURRENT_LIST_DIR}/Bin/Debug)
set(CMAKE_ARCHIEVE_OUTPUT_DIRECTORY_RELEASE  ${CMAKE_CURRENT_LIST_DIR}/Bin/Release)
message("------------------>add_subdirectory() fininshed!") 
message("------------------>CMAKE_ARCHIVE_OUTPUT_DIRECTORY:${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")
message("------------------>CMAKE_LIBRARY_OUTPUT_DIRECTORY:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
message("------------------>CMAKE_RUNTIME_OUTPUT_DIRECTORY :${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")

add_executable(hello-world hello-world.cpp)
target_link_libraries(hello-world message)

main.cpp

#include "Message.hpp"

#include <iostream>
#include <string>

std::ostream &Message::printObject(std::ostream &os) {
  os << "This is my very nice message: " << std::endl;
  os << message_;

  return os;
}

cmd命令进入到主MakeLists.txt所在目录后(需要提前下载Cmake及MinGW-w64,并将其bin路径添加到系统环境变量Path中):

cmake .
cmake --build .

最后在bin/debug会生成动态库的lib、dll文件,以及exe可执行文件。
windows系统cmake生成c++动态库无lib文件解决方法 && bat文件批处理cmd命令
别走~下面有提高生产力的方法↓

cmd下的cmake命令批处理

在学习cmake的过程中,也不知道要在cmd中敲入多少遍cmake … cmake --build .,过来人都懂~
有没有什么可以提高生产力的方法,可以让运行程序一样执行一系列的cmd命令呢?这时候就到脚本文件发挥作用的时候了,windows系统下的.bat(对应的,Linux下的是.sh文件)相当于执行cmd命令。只要创建一个txt,然后将cmd命令按行写入其中,最后将后缀名改为bat,使用时双击该.bat文件即可,是不是比当个键盘侠要省力得多。上面demo链接仓库里有写好的bat文件,直接用即可,爽歪歪~
举个栗子:文章来源地址https://www.toymoban.com/news/detail-424517.html

pushd %~dp0
#判断文件夹build是否存在,不存在则就创建
if not exist build (  
    mkdir build
) else (
    del /S /Q /F build
    rd /S /Q build
    mkdir build
)
 
cd build
cmake ..
cmake --build .
#等待回车后退出
TIMEOUT /T -1

到了这里,关于windows系统cmake生成c++动态库无lib文件解决方法 && bat文件批处理cmd命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows平台下静态库(.lib)和动态库(.dll)使用

    函数实现和变量的二进制文件 编译链接可执行程序时,静态库会直接展开到文件。 发布可执行程序时,不需要静态库。 编译出的可执行文件较大。 windows下动态库一般包含引入库(.lib)文件和动态库(.dll文件)。 dll包含函数实现和变量;lib包含该dll的中函数和变量的声明

    2024年02月01日
    浏览(33)
  • Windows 10系统下载----生成iso镜像文件

    Windows 10系统下载----生成iso镜像文件 VMware16虚拟机:下载和安装教程 VMware16虚拟机:安装Windows10系统----超详细教程 VMware16虚拟机:安装Windows10系统----卡顿优化 VMware16虚拟机:在Windows10系统下----安装VMware tools Windows 10官网下载地址: https://www.microsoft.com/zh-cn/software-download/windo

    2024年02月06日
    浏览(41)
  • windows下qt使用第三方库(静态链接库lib)、静态库和动态库区别、动态库的使用。

    这里主要是讲述windows下qt使用第三方库。 windows下qt使用第三方库(静态链接库lib)。 为了能够使测试更准确,首先自己用qt创建了一个已经封装好的lib库。 然后让另一个项目去链接这个lib静态库,并且去调用里面的方法。 目的: 使 untitled项目 能够使用 myllplib.lib 静态库,这

    2023年04月17日
    浏览(75)
  • CMake不生成QT的UI头文件

    QT版本5.14.2:: MSVC_2017_64 编译器VS2019 因为学习QT开发的时候要查看x.ui文件转换成ui_x.h头文件的内容,但是编译器编译的时候没有生成ui_x.h头文件。查看代码发现: 已经引用到了该文件了。可能是编译过程中,生成了,使用了,然后又删掉了。 学习过程,想看到里面的内容 打开

    2024年02月12日
    浏览(34)
  • AndroidNDK开发——使用Cmake编译生成so文件

    最近做串口开发需要编译不同的so文件,于是查找了各种资料,学习了一下so编译. 直接跑项目或者使用gradle构建so生成的so文件如下:这里大家根据自己的需求配置生成so文件,本文只是举例没有全部生成. 如果不引入so文件初始化和调用时会报错,提示找不到so文件,一定要记

    2024年02月15日
    浏览(30)
  • windows vscode jsoncpp cmake c++ 构建项目

    jsoncpp的编译和使用推荐文章: jsoncpp的编译和使用 | 爱编程的大丙 (subingwen.cn) https://www.subingwen.cn/cpp/jsoncpp/ 从这个链接下载jsoncpp-master:https://github.com/open-source-parsers/jsoncpp 可以把这个文件夹名字改成jsoncpp,改短点 (●\\\'◡\\\'●),路径为D:/jsoncpp 下载 cmake 工具:我下载的是3.28.1版

    2024年01月20日
    浏览(40)
  • 通过 CMake 制作库文件 静态库 和 动态库

    CMake Calc 项目 在这里有 add.c,div.c,mult.c,sub.c,main.c,head.h 二、生成静态库  CMakeLists.txt  CMakeLists.txt   (也可以写成这样) 执行命令:  三、生成动态库 CMakeLists.txt    CMakeLists.txt   (也可以写成这样) 

    2024年01月16日
    浏览(43)
  • 【小沐学C++】C++ 基于CMake构建工程项目(Windows、Linux)

    官网地址: https://cmake.org CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。 (1)官网下载地址

    2024年02月13日
    浏览(25)
  • .lib 文件,.dll 文件,.sln 文件都是干嘛的,他们各自都哪些内容,是如何生成这些文件的

    .lib 文件、 .dll 文件和 .sln 文件都是与 Microsoft Visual Studio 开发工具相关的文件。 .lib 文件(静态库文件): .lib 文件是静态库文件,包含一组对象文件的二进制代码和符号信息,可以被编译器链接到可执行文件中。当编译器编译程序时,它将 .a 文件(Linux)或 .lib 文件(Win

    2024年02月15日
    浏览(29)
  • C/C++封装:Windows/Linux下封装.lib/.so文件

    这里提供了两个C/C++中服务器与客户端之间通讯的两个程序,程序中封装了通信之间的函数方法,我们以这个程序为例进行封装。 文件目录结构按照C/C++标准开源项目进行存放: XTCP.h XTCP.cpp 首先编写编写 makefile 文件,用于编译两个程序,可以按照以下命令进行编译,编译后

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包