Windows Clion构建自定义静态库的方法
Clion默认使用CMake构建项目,需要我们自己编写CMakeLists.txt来管理项目。
项目结构#
项目中一共有4个cmake文件,根目录的CMakeLists.txt文件管理整个项目;reactor目录是项目的一个子模块,其下的CMakeLists.txt文件用于包含src和example/testlib两个子目录;src目录下的CMakeLists.txt负责生成静态库文件,example/testlib生成可执行文件测试src生成的静态链接库。
各个CMakeLists.txt的代码#
- 根目录的CMakeLists.txt
这个文件定义项目支持的最低的cmake版本、项目名称、使用的C++标准,并设置静态链接库的输出路径,引入自定义的头文件目录,最后添加子目录reactor。
cmake_minimum_required(VERSION 3.22)
project(comm_env)
set(CMAKE_CXX_STANDARD 14)
# 得提前创建好lib文件夹
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/reactor/lib)
include_directories(${PROJECT_SOURCE_DIR}/reactor/include)
add_subdirectory(${PROJECT_SOURCE_DIR}/reactor)
- reactor目录的CMakeLists.txt
这个文件的作用管理reactor这个项目模块,但这里我只是添加了两个子目录。
add_subdirectory(${PROJECT_SOURCE_DIR}/reactor/src)
add_subdirectory(${PROJECT_SOURCE_DIR}/reactor/example/testlib)
- src目录的CMakeLists.txt
这个文件构建静态链接库,输出目录在根目录的CMakeLists.txt中已经设置了。
# 点击Clion的锤子图标生成lib
add_library(reactor STATIC ${PROJECT_SOURCE_DIR}/reactor/src/tcp_server.cpp)
- testlib目录的CMakeLists.txt
这个文件生成可执行文件hellotest,并链接src生成的静态链接库。
add_executable(hellotest hellotest.cpp)
target_link_libraries(hellotest
${PROJECT_SOURCE_DIR}/reactor/lib/libreactor.a
)
遇到的问题#
之前学cmake时创建的示例项目在build可执行文件时,会自动创建项目中的静态库然后进行链接。但是在这个项目中,我在用Clion build hellotest时,一直提示找不到libreactor.a。实际上,这个项目确实没有生成libreactor.a。反复修改add_library的参数和调用位置,都没有生成静态链接库文件,翻了许多stackoverflow的问题也没有解决问题,困扰了我一整天。
后来,在Clion的教程中找到了静态链接库的构建方法,才发现静态链接库是需要额外步骤构建的。。。
Windows Clion中静态链接库构建方法#
CMakeLists.txt中的add_library命令会让Clion生成一个Run Configuration。我这个例子中就是reactor那一项。
除了让Clion自动添加Run Configuration,也可以自己手动添加。构建静态链接库是不需要可执行文件的,所以将对应的Run Configuration中的Target设置成静态链接库名(这里是reactor),Executable设置为空即可。
找到reactor这个项并选中它,然后点击左边的锤子图标,或使用快捷键Ctrl+F9,即可生成静态链接库。由于我设置了输出路径${PROJECT_SOURCE_DIR}/reactor/lib,所以生成的静态链接库就放在lib目录下。接下来切换到hellotest,就能够顺利编译通过。
还需要注意的是,需要预先创建lib目录,否则会报错。而且,如果设置的路径不是${PROJECT_SOURCE_DIR}/reactor/lib,而是reactor/lib的话,生成的静态链接库就会放在cmake-build-debug的某个子目录下,可以自己手动复制/剪切到项目目录中。
经过测试,在linux上直接用命令行进行cmake和make,都不会出现上述问题。。。
作者:yuxiayizhengwan
出处:https://www.cnblogs.com/yuxiayizhengwan/p/16255001.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!