CMake基础:覆盖项目开发的五大配套工具
目录
1.CMake的五大配套工具
2.cmake
3.ccmake
4.cmake-gui
5.ctest
6.cpack
7.总结
相关链接
1.CMake的五大配套工具
CMake实践:安装与配置
安装CMake后,以windows为例,在bin目录下就有五大配套工具:
在 文件夹中,cmake
、ccmake
、cmake-gui
、ctest
、cpack
是一系列配套工具,分别负责配置构建、交互式配置、图形化配置、测试、打包等环节,共同覆盖了从项目配置到最终分发的全流程。下面就来讲讲几个配套工具的功能。
2.cmake
核心命令行工具,CMake 的 “引擎”, 非常重要。
- 主要作用:解析项目根目录下的
CMakeLists.txt
,根据当前系统环境(如操作系统、编译器)生成对应的构建系统文件(如 Makefile、Ninja 脚本、Visual Studio 项目、Xcode 工程等)。 - 工作流程:通过命令行指定源码目录(
-S
)和构建目录(-B
),自动处理跨平台适配、依赖管理、编译选项等逻辑,生成可直接用于编译的构建文件。
示例:
cmake -S ./src -B ./build # 从 ./src 解析 CMakeLists,在 ./build 生成 Makefile
cd build && make # 用生成的 Makefile 编译项目
- 特点:非交互式,适合脚本、自动化流程(如 CI/CD),是最基础、最常用的 CMake 工具。
3.ccmake
curses 风格的交互式配置工具
- 主要作用:提供终端内的交互式界面,允许用户可视化修改 CMake 变量(如
CMAKE_BUILD_TYPE
、CMAKE_INSTALL_PREFIX
、自定义编译选项等),并实时生成构建系统。 - 适用场景:当需要调整 CMake 变量(如开启 / 关闭某个功能、设置依赖路径)但不想手动编辑
CMakeLists.txt
或命令行参数时使用,尤其适合没有图形界面的环境(如服务器、终端)。 - 使用流程:
ccmake -S ./src -B ./build # 启动交互式界面
# 在界面中通过方向键导航,按 Enter 修改变量(如将 CMAKE_BUILD_TYPE 设为 Release)
# 按 'c' 配置(configure),按 'g' 生成(generate)并退出
- 特点:终端交互式,比纯命令行
cmake
更直观地管理变量,但依赖 curses 库(需系统支持)。
在 Windows 系统上使用 ccmake
(CMake 的终端交互式配置工具)需要进行一些额外配置,因为 Windows 默认不支持类似 Linux/macOS 的 curses 终端界面。可通过一下方法来使用:
方法一:使用 Windows Subsystem for Linux (WSL)
推荐方案:通过 WSL 在 Windows 中运行 Linux 环境,完全兼容 ccmake
。
1.启用 WSL
打开 PowerShell(管理员权限),执行:
wsl --install # 安装默认 Linux 发行版(Ubuntu)
按提示重启系统,完成安装。
2.在 WSL 中安装 CMake
打开 WSL 终端(如 Ubuntu),执行:
3.使用 ccmake
- 将项目源码放在 WSL 可访问的路径(如
~/projects/myproject
); - 在 WSL 终端中进入项目目录,执行:
mkdir build && cd build
ccmake .. # 启动交互式配置界面
方法二:使用 MinGW/MSYS2 环境
在 Windows 原生环境中模拟 Unix 终端,提供 curses 支持。
1.安装 MSYS2
从 MSYS2 官网 下载安装程序,按提示完成安装。
2.安装 CMake 和依赖
打开 MSYS2 MinGW 64-bit 终端,执行:
pacman -Syu # 更新系统
pacman -S cmake ncurses # 安装 CMake 和 ncurses 库
3.使用 ccmake
在 MSYS2 终端中进入项目目录,执行:
mkdir build && cd build
ccmake .. # 在 MSYS2 终端中启动交互式界面
4.cmake-gui
图形化配置工具
- 主要作用:提供可视化窗口界面,功能与
ccmake
类似,但通过图形界面操作,更适合习惯鼠标交互的用户(如 Windows、macOS 桌面环境)。 - 核心功能:
- 可视化选择源码目录(
Where is the source code
)和构建目录(Where to build the binaries
); - 在窗口中直接编辑 CMake 变量(如勾选
BUILD_SHARED_LIBS
生成动态库); - 点击 “Configure” 生成临时配置,点击 “Generate” 生成最终构建系统文件。
- 可视化选择源码目录(
- 适用场景:对命令行不熟悉的用户,或需要频繁调整复杂变量(如多路径依赖、条件编译选项)时,图形界面更易操作。
5.ctest
CMake 自带的测试工具
- 主要作用:运行项目中通过
add_test()
定义的测试用例,自动执行测试并生成报告,支持并行测试、过滤测试、生成 XML 格式结果等。 - 工作流程:
- 在
CMakeLists.txt
中通过add_test(NAME <name> COMMAND <exe> [args])
定义测试; - 编译项目后,在构建目录中运行
ctest
执行所有测试(或通过-R <regex>
过滤特定测试)。
- 在
- 示例:
cd build # 进入构建目录(已生成测试目标)
ctest -j4 # 并行 4 个进程执行所有测试
ctest -R "unit_*" # 只执行名称匹配 "unit_*" 的测试
ctest --output-on-failure # 测试失败时输出详细日志
- 特点:与 CMake 无缝集成,无需额外配置测试框架(但可配合 Google Test、Catch2 等框架使用),是自动化测试的核心工具。
6.cpack
打包与分发工具
- 主要作用:根据项目的安装配置(通过
install()
命令定义),生成跨平台的安装包 / 分发文件(如.tar.gz
、.zip
、Debian 包.deb
、RPM 包.rpm
、Windows 安装程序.msi
等)。 - 工作流程:
- 在
CMakeLists.txt
中通过install(TARGETS ...)
定义安装路径(如可执行文件、库、头文件的安装位置); - 生成构建系统并编译后,在构建目录中运行
cpack
,根据配置生成对应格式的安装包。
- 在
- 示例:
cd build # 进入构建目录
make install # 先执行安装(可选,cpack 可自动处理)
cpack -G ZIP # 生成 ZIP 格式的压缩包
cpack -G DEB # 生成 Debian 包(需系统支持 dpkg)
- 特点:支持多种打包格式,可通过
CPack
相关变量(如CPACK_PACKAGE_NAME
、CPACK_VERSION
)定制包信息,简化项目分发流程。
7.总结
这五个工具分工明确,覆盖了 CMake 项目的全生命周期:
cmake
:核心生成工具,负责从CMakeLists.txt
生成构建系统;ccmake
/cmake-gui
:辅助配置工具,分别提供终端 / 图形化界面调整 CMake 变量;ctest
:专注测试,执行项目测试用例并生成报告;cpack
:专注打包,将编译产物封装为可分发的安装包。
它们共同构成了 CMake 从 “配置 - 生成 - 编译 - 测试 - 打包” 的完整生态。
相关链接
- CMake 官网 CMake - Upgrade Your Software Build System
- CMake 官方文档:CMake Tutorial — CMake 4.1.0-rc2 Documentation
- CMake 源码:https://github.com/Kitware/CMake
- CMake 源码:CMake · GitLab
- 中文版基础介绍: CMake 入门实战 | HaHack
- wiki: Home · Wiki · CMake / Community · GitLab
- Modern CMake 简体中文版: Introduction · Modern CMake