给我一个使用cmake构建c++工程的示例
时间: 2023-11-21 10:04:09 浏览: 99
好的,下面是一个使用CMake构建C++工程的示例。
我们假设这个工程有如下目录结构:
```
.
├── CMakeLists.txt
├── include
│ └── mylib.h
├── src
│ ├── main.cpp
│ └── mylib.cpp
└── test
├── CMakeLists.txt
└── mylib_test.cpp
```
其中:
- `include` 目录包含头文件 `mylib.h`
- `src` 目录包含源文件 `main.cpp` 和 `mylib.cpp`
- `test` 目录包含测试代码 `mylib_test.cpp`
下面是 `CMakeLists.txt` 文件的内容:
```cmake
# 设置 CMake 最低版本需求
cmake_minimum_required(VERSION 3.10)
# 设置项目名称和版本号
project(myproject VERSION 1.0)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 添加一个库 target,包含 mylib.cpp 和 mylib.h
add_library(mylib src/mylib.cpp include/mylib.h)
# 添加一个可执行文件 target,包含 main.cpp,以及 mylib 库
add_executable(myapp src/main.cpp)
target_link_libraries(myapp PRIVATE mylib)
# 添加一个测试 target,包含 mylib_test.cpp,以及 mylib 库
enable_testing()
find_package(GTest REQUIRED)
add_executable(mylib_test test/mylib_test.cpp)
target_link_libraries(mylib_test PRIVATE mylib GTest::GTest GTest::Main)
add_test(NAME mylib_test COMMAND mylib_test)
```
其中:
- `cmake_minimum_required(VERSION 3.10)` 声明了本工程需要 CMake 最低版本 3.10。
- `project(myproject VERSION 1.0)` 声明了本工程的名称和版本号。
- `set(CMAKE_CXX_STANDARD 11)` 设置了 C++ 标准为 C++11。
- `add_library(mylib src/mylib.cpp include/mylib.h)` 添加了一个名为 `mylib` 的库 target,包含 `mylib.cpp` 和 `mylib.h`。
- `add_executable(myapp src/main.cpp)` 添加了一个名为 `myapp` 的可执行文件 target,包含 `main.cpp` 和 `mylib` 库。
- `enable_testing()` 启用了测试功能。
- `find_package(GTest REQUIRED)` 查找 Google Test 库。
- `add_executable(mylib_test test/mylib_test.cpp)` 添加了一个名为 `mylib_test` 的测试 target,包含 `mylib_test.cpp` 和 `mylib` 库。
- `target_link_libraries(mylib_test PRIVATE mylib GTest::GTest GTest::Main)` 将 `mylib` 和 `GTest` 库链接到 `mylib_test` 中。
- `add_test(NAME mylib_test COMMAND mylib_test)` 添加了一个名为 `mylib_test` 的测试。
现在你可以使用以下命令构建和运行工程:
```bash
mkdir build
cd build
cmake ..
make
./myapp
ctest
```
`make` 命令将编译所有 target,并生成可执行文件和库文件。`./myapp` 命令将运行 `myapp` 可执行文件。`ctest` 命令将运行所有测试。
阅读全文