CMake从入门到精通完整教程

胖墨同学_8051

胖墨同学_8051

2026-08-07

447人浏览

原创

cmake不是编译器或构建工具,而是构建系统生成器,负责生成makefile或visual studio工程等;真正执行编译的是make、ninja或msbuild,新手常见问题源于未遵守外部构建规范及路径理解错误。

cmake从入门到精通完整教程

直接说结论:CMake 不是编译器,也不是构建工具,它只负责生成构建系统(比如 Makefile 或 Visual Studio 工程),真正干活的是 make、ninja 或 MSBuild。新手最容易卡在“为什么 cmake .. 没报错但 make 找不到源文件”这类问题上——根源几乎全是路径和构建目录没分清。

cmake .. 为什么总在 build 目录里执行?

因为 CMake 强烈要求「外部构建」(out-of-source build)。cmake .. 中的 .. 是指向上一级找 CMakeLists.txt,而当前目录(即 build)必须为空或全新,否则旧缓存可能干扰配置。

  • mkdir build && cd build && cmake .. 是唯一推荐的起手式,别图省事在源码根目录下直接 cmake .
  • 如果误在源码目录执行过 cmake .,会生成一堆 CMakeFiles/、CMakeCache.txt,必须手动删干净再进 build 目录重来
  • cmake -S . -B build 是现代写法(CMake 3.13+),更明确指定源码目录(-S)和构建目录(-B),避免 cd 错误

add_executable() 找不到源文件的常见原因

不是语法错,而是路径解析规则被忽略:add_executable(myapp main.cpp) 中的 main.cpp 是相对 CMAKE_CURRENT_SOURCE_DIR 的路径,不是当前 shell 路径。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • 假设项目结构是 src/main.cpp 和根目录 CMakeLists.txt,就得写 add_executable(myapp src/main.cpp),不能只写 main.cpp
  • 多文件时别拼字符串,用变量管理:set(SRCS src/main.cpp src/utils.cpp),再 add_executable(myapp ${SRCS})
  • 头文件包含路径要显式加:target_include_directories(myapp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include),否则 #include "xxx.h" 会失败

CMAKE_CXX_STANDARD 设置后仍报 C++17 特性不支持

仅 set(CMAKE_CXX_STANDARD 17) 不够,它只影响编译器命令行的 -std= 参数,但某些旧编译器(如 GCC 4.8)根本不支持 C++17,而 CMake 默认不检查兼容性。

  • 必须加 set(CMAKE_CXX_STANDARD_REQUIRED ON),否则 CMake 会悄悄降级到 C++11
  • 若用 Clang 或 MSVC,还需确认工具链是否启用对应标准,例如 MSVC 需 VS2017+ 才完整支持 C++17
  • 检查实际编译命令:运行 make VERBOSE=1,看输出里是否有 -std=c++17;没有就说明 REQUIRED 没生效或编译器太老

为什么 cmake --build build 总比 make 多一层封装?

cmake --build 是跨平台统一接口,底层调用的是你生成的构建系统,不是替代 make。它的价值在「不用记不同平台命令」——Linux 用 make,Windows 用 msbuild,Ninja 用 ninja,全被它屏蔽了。

  • cmake --build build 等价于 cd build && make(Linux)或 cd build && msbuild MyApp.sln(Windows)
  • 想并行编译:用 cmake --build build --parallel 4,比 make -j4 更可靠,尤其在 Ninja 或 Xcode 后端下
  • 若提示 Unknown argument --build,说明 CMake 版本 cd build && make

最常被跳过的细节是:CMakeLists.txt 改动后,必须重新运行 cmake ..(或 cmake -S . -B build)才能更新构建文件;只改源码不重配置,新增的 target_link_libraries() 或 find_package() 永远不会生效。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 跨平台开发
C++ 跨平台开发

本专题聚焦 C++ 在跨平台应用与工程构建中的实战应用,系统讲解 CMake 构建系统、跨平台编译配置、第三方库集成、调试技巧、静态与动态链接库管理等核心知识。通过实战案例(如跨平台工具开发、Linux与Windows编译兼容性项目),帮助学习者掌握 从环境配置到完整跨平台构建的开发能力。

2025.10.17

6006

15

c++  cmake用法
c++ cmake用法

本专题整合了c++ cmake用法相关教程,阅读专题下面的文章了解更多详细内容。

2025.10.23

1511

14

C++ 编译构建系统与CMake实战
C++ 编译构建系统与CMake实战

本专题聚焦 C++ 项目的编译与构建体系,系统讲解 CMake 的核心语法、项目结构设计、库与依赖管理、跨平台构建、调试与发布配置。通过完整项目示例,帮助开发者掌握 从源码到可执行程序的工程化构建流程,提升 C++ 项目在实际开发中的可维护性与扩展性。

2025.12.13

354

18

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 入门教程
Conan 2 入门教程

共0课时 | 0人学习

CLion CMake 快速入门教程
CLion CMake 快速入门教程

共0课时 | 0人学习