CMake构建C++项目的核心是编写CMakeLists.txt并生成原生构建系统;需创建源码和CMakeLists.txt,执行out-of-source构建(如mkdir build && cd build && cmake ..),再用make/ninja/VS编译运行。
用CMake构建C++项目,核心是写好CMakeLists.txt,然后用命令行生成并调用原生构建工具(如Make、Ninja或Visual Studio)。它不直接编译代码,而是“生成构建系统”,让项目更易跨平台、可维护。
一个最小可行的C++项目通常包含:
main.cpp)
顶层 CMakeLists.txt(必需,放在项目根目录)例如,新建一个简单项目:
hello/ ├── CMakeLists.txt └── main.cpp
main.cpp 内容可以是标准的 "Hello, World!";CMakeLists.txt 至少要指定最低CMake版本、项目名和可执行文件构建规则:
cmake_minimum_required(VERSION 3.10) project(hello)add_executable(hello main.cpp)
推荐在单独的构建目录中运行 CMake,避免污染源码。例如:
mkdir build && cd build cmake .. # 从上级目录读取 CMakeLists.txt
这会根据当前平台自动选择生成器(Linux/macOS 默认 Makefile,Windows 默认 Visual Studio)。你也可以显式指定:
cmake -G "Unix Makefiles" ..cmake -G "Ninja" ..(需提前安装 Ninja)cmake -G "Visual Studio 17 2025" -A x64 ..(Windows)生成完成后,在构建目录中调用对应构建工具:
make(或 make hello)ninja(或 ninja hello)hello.sln 文件,或用命令 cmake --build .
构建成功后,可执行文件出现在构建目录下(如 build/hello),直接运行即可。
实际项目中常需要设置标准、优化选项、查找依赖等。例如:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)(在 cmake 命令中加 -DCMAKE_BUILD_TYPE=Debug 更常用)target_include_directories(hello PRIVATE include/)
find_package(Threads REQUIRED) + target_link_libraries(hello Threads::Threads)
这些都写在 CMakeLists.txt 中,CMake 会自动处理平台差异。
不复杂但容易忽略:每次修改 CMakeLists.txt 后,如果已生成过构建文件,只需在构建目录里重新运行 cmake . 或 cmake ..,无需删掉整个 build 目录(除非改了生成器或关键变量)。