news 2026/4/25 3:25:28

CMake 构建流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake 构建流程

CMake 构建流程详解

CMake 的构建过程分为两个主要阶段配置阶段(Configure)构建阶段(Build),可选还有测试阶段(Test)安装阶段(Install)。理解这个流程是掌握 CMake 的关键。

完整构建流程图解
源码目录 (含 CMakeLists.txt) │ ▼ mkdir build ← 创建独立的构建目录(强烈推荐!) │ ▼ cd build │ ▼ cmake [选项] <源码路径> ← 配置阶段:生成构建系统 │ ▼ cmake --build . [选项] ← 构建阶段:真正编译、链接 │ ▼(可选) ctest . ← 测试阶段:运行单元测试 │ ▼(可选) cmake --install . ← 安装阶段:安装到指定路径
1. 配置阶段(Configure) -cmake ..

作用:读取所有CMakeLists.txt,检查环境、编译器、依赖,生成平台原生的构建脚本(如 Makefile、Ninja 文件、Visual Studio 项目等)。

常用命令示例

cdbuild cmake..# 最简单,使用默认设置cmake..-DCMAKE_BUILD_TYPE=Release# 指定 Release 模式(优化)cmake..-DCMAKE_BUILD_TYPE=Debug# Debug 模式(带调试信息)cmake..-G"Ninja"# 使用 Ninja 生成器(更快)cmake..-DCMAKE_CXX_STANDARD=20# 指定 C++20cmake..-S.-B.# 显式指定源码目录(S)和构建目录(B),CMake 3.13+

这一步会生成的文件(在 build 目录):

  • CMakeCache.txt:缓存配置变量(下次运行可复用)
  • CMakeFiles/:中间文件
  • Makefile / cmake_install.cmake / *.sln(取决于生成器)

提示:如果修改了 CMakeLists.txt,只需重新运行cmake ..即可更新配置。

2. 构建阶段(Build) -cmake --build .

作用:调用底层工具(make、ninja、msbuild 等)实际编译源码、生成可执行文件或库。

常用命令示例

cmake --build.# 默认构建所有目标cmake --build.--target myapp# 只构建指定目标 myappcmake --build.--config Release# 多配置生成器(如 VS)指定配置cmake --build.-j8# 并行编译,使用 8 个线程(推荐)cmake --build.--clean-first# 先清理再构建

等价的旧方式(仍广泛使用):

  • 如果生成的是 Makefile:直接makemake -j8
  • 如果生成的是 Ninja:直接ninjaninja -j8
3. 测试阶段(Test) -ctest

前提:在 CMakeLists.txt 中使用add_test()定义测试。

常用命令

ctest# 运行所有测试ctest -V# 详细输出ctest -R"login"# 只运行名称包含 login 的测试ctest --output-on-failure# 只在失败时显示输出
4. 安装阶段(Install) -cmake --install

前提:在 CMakeLists.txt 中使用install()命令定义安装规则。

常用命令

cmake --install.# 安装到默认路径(通常 /usr/local)cmake --install.--prefix /opt/myapp# 指定安装前缀sudocmake --install.# 系统级安装常需要管理员权限
推荐的完整标准流程脚本(跨平台)
#!/bin/bashset-e# 任意错误即退出rm-rf build# (可选)彻底清理mkdirbuild&&cdbuild cmake..\-DCMAKE_BUILD_TYPE=Release\-DCMAKE_CXX_STANDARD=17\-G"Ninja"# 可选,使用 Ninja 更快cmake --build.-j$(nproc)# 并行构建,使用所有 CPU 核心ctest -j$(nproc)--output-on-failure# (可选)运行测试sudocmake --install.--prefix /usr/local# (可选)系统安装
常见问题与技巧
问题解决方案
配置太慢使用 Ninja 生成器:cmake -G "Ninja" ..
想切换 Debug/Release单配置(Makefile/Ninja):删除 build 目录重新配置
多配置(VS):用--config Debug/Release
修改 CMakeLists.txt 后没生效重新运行cmake ..
想彻底清理删除整个 build 目录(最干净)
IDE 中使用VS/CLion/Qt Creator 等会自动管理以上流程

掌握这个构建流程后,你就能高效、可靠地管理任何规模的 C++ 项目。接下来可以学习更高级的话题,如子目录管理、外部库集成、交叉编译等。

如果你想看某个具体场景的完整构建脚本(例如带测试 + 安装 + 多目标的项目),随时告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 3:24:43

16、地图与位置功能开发指南

地图与位置功能开发指南 1. 地图与位置功能基础 在开发过程中,有一个新函数会接收 _coords 参数,并将这些值作为自定义字段传递给 Appcelerator 云服务的照片对象。Appcelerator 云服务支持对照片对象进行地理定位查询,这样就能利用存储在照片自定义字段中的信息来查找照…

作者头像 李华
网站建设 2026/4/23 10:49:09

终极SQL查询压力测试指南:SqlQueryStress完整使用教程

终极SQL查询压力测试指南&#xff1a;SqlQueryStress完整使用教程 【免费下载链接】SqlQueryStress SqlQueryStress 是一个用于测试 SQL Server 查询性能和负载的工具&#xff0c;可以生成大量的并发查询来模拟高负载场景。 通过提供连接信息和查询模板&#xff0c;可以执行负载…

作者头像 李华
网站建设 2026/4/23 18:10:50

PaddlePaddle镜像集成飞桨框架最新版,全面支持Transformer结构

PaddlePaddle镜像集成飞桨框架最新版&#xff0c;全面支持Transformer结构 在中文自然语言处理的实际落地过程中&#xff0c;开发者常常面临一个尴尬的局面&#xff1a;模型设计得再精巧&#xff0c;一旦进入部署阶段&#xff0c;就可能因为环境依赖错乱、CUDA版本不匹配或Pyth…

作者头像 李华
网站建设 2026/4/23 3:36:21

终极指南:在Jupyter环境中轻松运行C代码的完整方案

你是否厌倦了传统的C语言开发流程&#xff1f;在编辑器和终端之间来回切换、手动编译调试的过程是否让你感到繁琐&#xff1f;现在&#xff0c;通过Jupyter C Kernel&#xff0c;你可以获得全新的C语言开发体验。这个开源项目将C语言的强大功能完美融入交互式的Jupyter Noteboo…

作者头像 李华
网站建设 2026/4/20 21:29:48

海尔智能设备无缝接入HomeAssistant:打破品牌壁垒的完整指南

海尔智能设备无缝接入HomeAssistant&#xff1a;打破品牌壁垒的完整指南 【免费下载链接】haier 项目地址: https://gitcode.com/gh_mirrors/ha/haier 在智能家居蓬勃发展的今天&#xff0c;用户面临的最大困扰往往是不同品牌设备之间的兼容性问题。海尔作为家电行业的…

作者头像 李华
网站建设 2026/4/23 14:37:42

HarmBench终极指南:5步掌握AI安全评估标准化框架

HarmBench终极指南&#xff1a;5步掌握AI安全评估标准化框架 【免费下载链接】HarmBench HarmBench: A Standardized Evaluation Framework for Automated Red Teaming and Robust Refusal 项目地址: https://gitcode.com/gh_mirrors/ha/HarmBench 在人工智能技术快速发…

作者头像 李华