c++ cmake 多文件项目,多个cmakelists.txt,每个模块都可以单独编译运行
时间: 2023-08-31 10:26:38 浏览: 224
Android Studio NDK 使用Cmake指定输出路径和生成多个so案例
4星 · 用户满意度95%
在 C++ 多文件项目中,可以通过将代码分成多个模块并使用多个 CMakeLists.txt 文件来管理它们。为了使每个模块都可以单独编译运行,我们需要为每个模块创建一个单独的 CMakeLists.txt 文件,并将其设置为可执行文件。
假设我们有以下项目结构:
```
myproject/
├── CMakeLists.txt
├── module1/
│ ├── CMakeLists.txt
│ ├── include/
│ │ └── module1.h
│ └── src/
│ └── module1.cpp
└── module2/
├── CMakeLists.txt
├── include/
│ └── module2.h
└── src/
└── module2.cpp
```
其中,`myproject ` 目录下的 `CMakeLists.txt` 文件是主 CMakeLists.txt 文件,它用于管理整个项目。`module1` 目录和 `module2` 目录是两个子模块,每个子模块都有自己的 `CMakeLists.txt` 文件、头文件和源文件。
现在,我们需要使用 CMake 来构建这个项目。我们可以在 `module1` 目录下创建一个名为 `CMakeLists.txt` 的文件,并添加以下内容:
```cmake
# 添加头文件搜索路径
include_directories(include)
# 添加源文件
add_executable(module1 src/module1.cpp)
# 暴露头文件
target_include_directories(module1 PUBLIC include)
```
该 `CMakeLists.txt` 文件指定了 `module1` 子模块的构建规则。`include_directories` 命令添加了头文件搜索路径,它告诉 CMake 在 `include` 目录中查找头文件。`add_executable` 命令编译 `module1.cpp` 源文件并生成一个可执行文件 `module1`。最后,`target_include_directories` 命令将 `include` 目录暴露给其他模块,以便它们可以包含 `module1.h` 头文件。
然后,在 `module2` 目录下创建一个名为 `CMakeLists.txt` 的文件,并添加以下内容:
```cmake
# 添加头文件搜索路径
include_directories(include)
# 添加源文件
add_executable(module2 src/module2.cpp)
# 暴露头文件
target_include_directories(module2 PUBLIC include)
```
该 `CMakeLists.txt` 文件指定了 `module2` 子模块的构建规则,与 `module1` 子模块类似。
完成以上步骤后,我们可以使用以下命令来构建每个模块:
```bash
cd module1
mkdir build
cd build
cmake ..
make
```
```bash
cd module2
mkdir build
cd build
cmake ..
make
```
这些命令将进入每个模块的目录,创建一个新的构建目录,并使用相应的 CMakeLists.txt 文件来构建和编译可执行文件。
这就是如何使用多个 CMakeLists.txt 文件来管理 C++ 多文件项目并使每个模块都可以单独编译运行的示例。
阅读全文