cmake 多级目录下文件包含
时间: 2023-10-15 22:07:14 浏览: 94
在 CMake 中,可以使用 `add_subdirectory()` 命令来将子目录添加到 CMake 构建中。一般情况下,我们会将每一个子目录作为一个模块,每个模块都有自己的 CMakeLists.txt 文件。
在 CMakeLists.txt 文件中,我们可以使用 `include_directories()` 命令指定头文件目录,`add_executable()` 命令来添加可执行文件,`add_library()` 命令来添加静态库或动态库等。
例如,我们有一个项目结构如下:
```
project
├── CMakeLists.txt
├── src
│ ├── CMakeLists.txt
│ ├── main.cpp
│ ├── foo.cpp
│ └── foo.h
└── lib
├── CMakeLists.txt
├── bar.cpp
└── bar.h
```
在项目的根目录下的 CMakeLists.txt 文件中,我们可以使用 `add_subdirectory()` 命令来添加子目录:
```
cmake_minimum_required(VERSION 3.10)
project(my_project)
add_subdirectory(src)
add_subdirectory(lib)
```
在 src 目录下的 CMakeLists.txt 文件中,我们可以使用 `include_directories()` 命令指定头文件目录,`add_executable()` 命令来添加可执行文件:
```
include_directories(${PROJECT_SOURCE_DIR}/lib)
add_executable(my_app main.cpp foo.cpp)
```
在 lib 目录下的 CMakeLists.txt 文件中,我们可以使用 `add_library()` 命令来添加静态库或动态库:
```
add_library(my_lib STATIC bar.cpp)
target_include_directories(my_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
```
在这个例子中,我们使用了 `target_include_directories()` 命令将当前目录添加到 my_lib 库的头文件搜索路径中。
总的来说,CMake 支持多级目录下文件的包含,只需要在每一个模块的 CMakeLists.txt 文件中正确设置头文件和源文件路径即可。
阅读全文