【CMake】同时生成静态库和动态库
C++代码同上一篇文章《构建和链接静态库和动态库》,CMakeLists.txt的内容修改如下:
1 # 设置cmake所需的最低版本 2 cmake_minimum_required(VERSION 3.21) 3 # 声明工程名称和工程支持的编程语言 4 project(CmakeTest LANGUAGES CXX) 5 6 # 创建位置无关的代码 7 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 8 9 add_library(message-objs 10 OBJECT 11 Message.hpp 12 Message.cpp 13 ) 14 # 创建动态库 15 add_library(message-shared 16 SHARED 17 $<TARGET_OBJECTS:message-objs> 18 ) 19 20 # 修改目标属性 21 set_target_properties(message-shared 22 PROPERTIES 23 OUTPUT_NAME "message" 24 ) 25 26 # 创建静态库 27 add_library(message-static 28 STATIC 29 $<TARGET_OBJECTS:message-objs> 30 ) 31 32 # 修改目标属性 33 set_target_properties(message-static 34 PROPERTIES 35 OUTPUT_NAME "message" 36 ) 37 38 # 指示cmake生成一个可执行程序,该程序通过编译、连接源文件main.cpp生成 39 add_executable(${PROJECT_NAME} main.cpp) 40 41 # 链接静态库 42 target_link_libraries(${PROJECT_NAME} message-shared)
可以使用对象库(message-objs)来生成静态库(message-static
)和动态库(message-shared
)。要注意引用对象库的生成器表达式语法:$<TARGET_OBJECTS:message-objs>
。生成器表达式是CMake在生成时(即配置之后)构造,用于生成特定于配置的构建输出。