目录
下面我将通过一个具体的 CMake 构建实例来展示如何使用 CMake 来管理一个简单的 C++ 项目。这个示例将包括以下几个部分:
- 项目结构
- CMakeLists.txt 文件
- 源代码
- 构建过程
项目结构
假设我们的项目结构如下:
深色版本
1MyProject/
2├── CMakeLists.txt
3├── src/
4│ ├── main.cpp
5│ └── utility.cpp
6└── include/
7 └── utility.hpp
1. CMakeLists.txt 文件
首先,我们需要创建一个 CMakeLists.txt
文件来配置项目的构建。这个文件将包含项目的元数据、源文件列表、编译选项等信息。
示例 CMakeLists.txt 文件
cmake
深色版本
1cmake_minimum_required(VERSION 3.10) # 设置所需的 CMake 最低版本
2project(MyProject VERSION 1.0 LANGUAGES CXX) # 设置项目名称、版本和使用的语言
3
4# 设置 C++ 标准
5set(CMAKE_CXX_STANDARD 17)
6set(CMAKE_CXX_STANDARD_REQUIRED True)
7
8# 定义源文件列表
9set(SOURCE_FILES
10 src/main.cpp
11 src/utility.cpp
12)
13
14# 创建可执行文件
15add_executable(${PROJECT_NAME} ${SOURCE_FILES})
16
17# 查找并链接 Boost 库(假设需要 Boost)
18find_package(Boost REQUIRED COMPONENTS system filesystem)
19target_link_libraries(${PROJECT_NAME} Boost::system Boost::filesystem)
20
21# 添加测试目标
22enable_testing()
23add_subdirectory(tests) # 将测试子目录添加到构建过程中
2. 源代码
接下来,我们创建源代码文件。
main.cpp
文件
cpp
深色版本
1#include <iostream>
2#include "utility.hpp"
3
4int main() {
5 std::cout << "Hello from MyProject v1.0!" << std::endl;
6 utility::printMessage("This is a test message.");
7 return 0;
8}
utility.hpp
文件
cpp
深色版本
1#pragma once
2
3namespace utility {
4 void printMessage(const std::string& message);
5}
utility.cpp
文件
cpp
深色版本
1#include "utility.hpp"
2#include <iostream>
3
4namespace utility {
5 void printMessage(const std::string& message) {
6 std::cout << message << std::endl;
7 }
8}
3. 测试代码
假设我们有一个简单的测试文件 test.cpp
在 tests/
目录下:
tests/CMakeLists.txt
cmake
深色版本
1enable_testing()
2
3add_executable(test tests/test.cpp)
4target_link_libraries(test ${PROJECT_NAME})
5
6add_test(NAME test-command COMMAND test)
tests/test.cpp
cpp
深色版本
1#include <gtest/gtest.h>
2#include "utility.hpp"
3
4TEST(UtilityTests, PrintMessage) {
5 // 这里可以使用 GTest 来编写测试用例
6 // 由于 CMakeLists.txt 中已经链接了 main 目标,这里可以直接使用 utility::printMessage
7 utility::printMessage("Test message");
8}
4. 构建过程
现在我们准备好构建项目了。在终端中执行以下命令:
创建构建目录
bash
深色版本
1mkdir build
2cd build
配置 CMake
bash
深色版本
1cmake ..
构建项目
bash
深色版本
1make
运行测试(如果启用了测试)
bash
深色版本
1ctest
总结
通过上述步骤,我们可以看到 CMake 如何帮助我们管理一个简单的 C++ 项目。这个例子涵盖了 CMakeLists.txt 文件的基本配置、源代码的组织、构建过程以及测试的集成。这个流程可以扩展到更复杂的项目,只需相应地增加更多的源文件、库、测试等。