最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
CMake 012:Linux平台动态库与可执行文件单文件构建指南
时间:2026-05-31 13:10:01 编辑:袖梨 来源:一聚教程网
在C/C++开发中,库的编译与链接是工程化开发的关键环节。本文将详细解析如何使用CMake高效管理动态库的完整生命周期,从编译到运行一步到位。
Bilibili 同步视频
一、静态库与动态库在CMake中的差异解析
初学者常误以为静态库和动态库的CMake配置差异很大,实际上两者的区别仅在于一个关键参数。通过CMake的add_library命令可以轻松实现两种库类型的切换。
静态库:
add_library(xxx STATIC xxx.cpp)动态库:
add_library(xxx SHARED xxx.cpp)
若不指定类型,CMake会根据平台默认规则选择库类型。真正的差异在于查找时机:静态库仅需编译时存在,而动态库需要在编译和运行时都能被找到。
二、高效工程结构设计方案
推荐使用单一CMakeLists.txt管理整个项目,结构如下:
102-Cmake-Lib/
├── CMakeLists.txt
├── xlog/
│ ├── xlog.cpp
│ └── xlog.h
└── test-xlog/
└── test-xlog.cpp
这种结构便于扩展,新增模块时无需拆分构建文件。
三、CMakeLists.txt配置详解
以下是完整的配置示例,包含详细注释:
cmake_minimum_required(VERSION 3.20)
project(XLOG)
add_library(xlog SHARED
xlog/xlog.cpp
)
include_directories(xlog)
add_executable(test-xlog
test-xlog/test-xlog.cpp
)
target_link_libraries(test-xlog
xlog
)
配置要点说明
SHARED参数决定生成动态库include_directories设置公共头文件路径target_link_libraries实现精确的库链接
四、编译运行全流程
1. 标准编译流程
cmake -S . -B build
cmake --build build
编译完成后将生成动态库文件和可执行程序。
2. 运行机制解析
CMake自动添加rpath绝对路径,确保运行时能正确找到动态库。通过ldd命令可以验证这一机制。
五、跨平台兼容性
本方案支持多平台:
Linux:生成.so文件
Mac:生成.dylib文件
Windows:生成.dll和.lib文件
六、核心要点总结
静态/动态库仅需修改一个参数
动态库需要编译和运行时都能被找到
单一CMake文件管理更高效
CMake自动处理库查找路径
方案支持多平台使用

通过本文的完整方案,开发者可以轻松解决C/C++工程中的库管理难题,实现高效的跨平台开发。