【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在生成时(即配置之后)构造,用于生成特定于配置的构建输出。

posted @ 2022-08-04 15:50  禅元天道  阅读(1541)  评论(0编辑  收藏  举报