失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > windows系统cmake生成c++动态库无lib文件解决方法 bat文件批处理cmd命令

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

时间:2023-11-06 08:12:51

相关推荐

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

作为cmake初学者,在windows系统下使用cmake生成c++动态库时出现了下图所示问题,是关于lib文件的。找了一圈,也没发现生成有lib文件。

在google上查,才发现windows系统下动态库生成lib文件,还需要添加以下命令:

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

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

文件目录架构:

——源文件目录

——hello-world.cpp

——CMakeLists.txt

——message

——|——Message.cpp

——|——CMakeLists.txt

——|——include

————|——Message.hpp

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

库文件的CMakeLists.txt:

# set minimum cmake versioncmake_minimum_required(VERSION 3.0 FATAL_ERROR)# project name and languageproject(recipe-03 LANGUAGES CXX)set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)#配置编译后的输出路径# 设定动态链接库的存储路径SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_LIST_DIR}/../bin)# generate a library from sourcesadd_library(messageSHAREDMessage.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 versioncmake_minimum_required(VERSION 3.0 FATAL_ERROR)# project name and languageproject(recipe-03 LANGUAGES CXX)# generate a library from sourcesadd_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可执行文件。

别走~下面有提高生产力的方法↓

cmd下的cmake命令批处理

在学习cmake的过程中,也不知道要在cmd中敲入多少遍cmake … cmake --build .,过来人都懂~

有没有什么可以提高生产力的方法,可以让运行程序一样执行一系列的cmd命令呢?这时候就到脚本文件发挥作用的时候了,windows系统下的.bat(对应的,Linux下的是.sh文件)相当于执行cmd命令。只要创建一个txt,然后将cmd命令按行写入其中,最后将后缀名改为bat,使用时双击该.bat文件即可,是不是比当个键盘侠要省力得多。上面demo链接仓库里有写好的bat文件,直接用即可,爽歪歪~

举个栗子:

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

如果觉得《windows系统cmake生成c++动态库无lib文件解决方法 bat文件批处理cmd命令》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。