CMake 多目录项目结构
当项目变大时,通常会把源码按功能或模块拆到多个目录,每个目录可有自己的 CMakeLists.txt,由顶层通过 add_subdirectory() 引入,形成多目录项目结构。
典型布局
project/
├── CMakeLists.txt # 顶层:最低版本、project、add_subdirectory
├── src/
│ ├── CMakeLists.txt # 可执行文件、应用层
│ └── main.cpp
├── lib/
│ ├── CMakeLists.txt # 内部库
│ ├── foo.cpp
│ └── include/
└── tests/
└── CMakeLists.txt # 测试
顶层 CMakeLists.txt 示例:
cmake_minimum_required(VERSION 3.10)
project(MyApp VERSION 1.0)
add_subdirectory(lib)
add_subdirectory(src)
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
- add_subdirectory(子目录) 会进入该子目录并执行其中的 CMakeLists.txt;子目录中定义的目标(库、可执行文件)对父目录可见,可用 target_link_libraries 等链接。
- 各子目录的 CMAKE_CURRENT_SOURCE_DIR 为该子目录路径,便于写相对路径。