c++ cmake 多文件项目,多个cmakelists.txt,每个模块都可以单独编译运行,项目根目录下有include文件夹,里面的头文件被所有模块引用,给出示例
时间: 2024-02-28 22:53:12 浏览: 87
好的,下面是一个示例:
我们假设有三个模块:module1、module2 和 module3,它们都需要使用位于项目根目录下的 include 文件夹中的头文件。目录结构如下:
```
project/
|-- CMakeLists.txt
|-- include/
| `-- common.h
|-- module1/
| |-- CMakeLists.txt
| `-- source1.cpp
|-- module2/
| |-- CMakeLists.txt
| `-- source2.cpp
`-- module3/
|-- CMakeLists.txt
`-- source3.cpp
```
首先,在项目根目录下的 CMakeLists.txt 中添加 include 文件夹:
```cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 添加 include 文件夹
include_directories(include)
# 添加子目录
add_subdirectory(module1)
add_subdirectory(module2)
add_subdirectory(module3)
```
然后,在每个模块的 CMakeLists.txt 中,分别定义自己的可执行文件,并引用公共头文件:
```cmake
# module1/CMakeLists.txt
add_executable(module1 source1.cpp)
# 引用公共头文件
target_include_directories(module1 PUBLIC ${PROJECT_SOURCE_DIR}/include)
```
```cmake
# module2/CMakeLists.txt
add_executable(module2 source2.cpp)
# 引用公共头文件
target_include_directories(module2 PUBLIC ${PROJECT_SOURCE_DIR}/include)
```
```cmake
# module3/CMakeLists.txt
add_executable(module3 source3.cpp)
# 引用公共头文件
target_include_directories(module3 PUBLIC ${PROJECT_SOURCE_DIR}/include)
```
现在,我们可以分别在 module1、module2 和 module3 目录下运行 cmake 和 make 命令,分别编译并运行每个模块:
```bash
cd module1
mkdir build && cd build
cmake ..
make
./module1
```
```bash
cd module2
mkdir build && cd build
cmake ..
make
./module2
```
```bash
cd module3
mkdir build && cd build
cmake ..
make
./module3
```
注意,在每个模块的 CMakeLists.txt 中,我们使用了 target_include_directories 命令来引用公共头文件,并将其设置为 PUBLIC,这样其他模块也可以访问公共头文件。
阅读全文