构建流程
项目往往要拆成库 + 主程序:add_library 构建静态库(.a/.lib)或动态库(.so/.dll),主程序链接使用。
库类型
- STATIC 静态库:编译进可执行文件,体积大、部署简单
- SHARED 动态库:运行时加载,体积小、更新方便
链接方式
target_link_libraries(主程序 PRIVATE 库目标名),CMake 自动处理依赖。
代码示例
# 结构
# libmath/
# CMakeLists.txt
# math.h math.cpp
# app/
# CMakeLists.txt
# main.cpp
# libmath/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MathLib CXX)
add_library(math STATIC math.cpp)
target_include_directories(math PUBLIC .)
# app/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(App CXX)
add_executable(app main.cpp)
add_subdirectory(../libmath libmath_build)
target_link_libraries(app PRIVATE math)