c++ cmake 多文件项目,多个cmakelists.txt,每个模块都可以单独编译运行,且模块有共同的include文件,给出示例
时间: 2024-02-28 14:53:08 浏览: 221
C++版本使用CMakeLists.txt编译(不同目录多个源文件)可执行文件
好的,下面是一个简单的示例:
假设我们有两个模块:module1 和 module2,它们都需要共享一个名为 utils.h 的头文件,目录结构如下:
```
project/
|-- CMakeLists.txt
|-- module1/
| |-- CMakeLists.txt
| |-- source1.cpp
| `-- utils.h
`-- module2/
|-- CMakeLists.txt
|-- source2.cpp
`-- utils.h
```
首先,我们在 project 目录下的 CMakeLists.txt 中定义一个公共的库,将 utils.h 添加到其中:
```cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 添加公共库
add_library(utils utils.h)
# 添加子目录
add_subdirectory(module1)
add_subdirectory(module2)
```
然后,在每个模块的 CMakeLists.txt 中,分别引用公共库并定义自己的可执行文件:
```cmake
# module1/CMakeLists.txt
add_executable(module1 source1.cpp)
# 引用公共库
target_link_libraries(module1 utils)
```
```cmake
# module2/CMakeLists.txt
add_executable(module2 source2.cpp)
# 引用公共库
target_link_libraries(module2 utils)
```
现在,我们可以分别在 module1 和 module2 目录下运行 cmake 和 make 命令,分别编译并运行每个模块:
```bash
cd module1
mkdir build && cd build
cmake ..
make
./module1
```
```bash
cd module2
mkdir build && cd build
cmake ..
make
./module2
```
注意,我们在每个模块的 CMakeLists.txt 中没有指定 include 目录,这是因为我们已经将 utils.h 添加到公共库中,可以直接在每个模块中引用。
阅读全文