cmake生成动态库静态库
时间: 2025-01-08 18:55:42 浏览: 5
### 使用CMake生成动态库和静态库
在C++开发过程中,通过CMake可以方便地管理项目并生成不同类型的库文件。为了创建动态库(共享库)和静态库,可以在`CMakeLists.txt`中定义相应的设置。
#### 创建静态库
静态库是在编译阶段链接到目标程序中的二进制文件集合。要创建一个名为`my_static_lib`的静态库:
```cmake
add_library(my_static_lib STATIC src/static.cpp)
```
这条命令告诉CMake将指定源码文件打包成静态库[^1]。
对于更复杂的场景,比如处理头文件复制以及解决多重包涵依赖关系时,则可参照如下配置方式来增强构建脚本的功能性[^3]:
```cmake
set(header_files "path/to/header.h")
file(COPY ${header_files} DESTINATION ${PROJECT_BINARY_DIR}/out/include)
target_include_directories(my_static_lib PUBLIC ${PROJECT_SOURCE_DIR}/include)
```
这里不仅指定了静态库本身的信息,还设置了公共包含路径以便其他模块能够访问该库提供的接口。
#### 创建动态库
相比之下,动态库会在运行时加载,并允许多个应用程序共享同一份副本。以下是创建名为`my_shared_lib`的动态库的方法:
```cmake
add_library(my_shared_lib SHARED src/shared.cpp)
```
此指令会指示CMake按照平台约定的方式去生产共享对象(.so) 或者DLL (.dll),具体取决于操作系统环境。
当涉及到多层依赖项之间的相互作用时——特别是针对那些既含有内部又存在外部依赖性的大型工程来说,在链接选项上做适当调整就显得尤为重要了:
```cmake
set(LIBS "-L/path/to/libraries -llibrary_name")
target_link_libraries(my_shared_lib PRIVATE -Wl,--start-group ${LIBS} -Wl,--end-group)
```
上述代码片段展示了如何利用特定于链接器的关键字参数(`-Wl`) 来确保所有必要的符号都能被正确解析出来。
综上所述,无论是静态还是动态库的制作过程都离不开合理规划好各个组成部分间的关联逻辑;而借助像CMake这样的工具则可以让整个流程变得更加高效便捷。
阅读全文