Skip to Main Content
CMake 学习Back to Top

CMake 学习

3 minutes

官方文档 和 Professional CMake: A Practical Guide 是第一信息源 本地 仓库 已建立 2026-06-25 开始到月底30号 共计 5天 ,搞定它 时间足够充裕

一天速通 CMake 的“核心困难“不在语法,而在心智模型。官方文档是参考手册而不是教程,按顺序读很容易陷入“每个命令都认识、但就是不会搭项目“的状态。核心困难点大致如下: 三阶段心智模型(最大的坎) CMake 不是“怎么编译“的脚本,而是“配置 → 生成 → 构建“三阶段:cmake -S . -B build 只做 configure + generate,生成 Ninja/Makefile 后才真正编译。所有变量和条件判断都在配置期求值,没有“运行时“概念。不理解这一点,后面所有现象都会显得“莫名其妙“。

新旧两种范式并存,必须只学新的 旧风格是改全局变量(include_directories、add_definitions、CMAKE_CXX_FLAGS),新风格(Modern CMake)是以 target 为中心:target_include_directories、target_link_libraries、target_compile_features,靠 PUBLIC / PRIVATE / INTERFACE 传播依赖。官方文档里两种风格混着写,网上旧答案更是遍地旧风格。困难在于:你要主动忽略旧范式,否则会学出“能跑但一扩展就崩“的项目。

生成器表达式(Generator Expressions) $<BUILD_INTERFACE:…>、$<TARGET_PROPERTY:…> 这类 $<…> 是“生成期“才求值的语法,等于又加了一层求值时机。写库的导出、条件编译、路径传播时绕不开,是新手最容易卡住的地方。

依赖管理的丛林 find_package(MODULE vs CONFIG 模式)、FetchContent、add_subdirectory、ExternalProject、imported target 概念。真实项目 70% 的 CMake 时间都花在这里。一天内只掌握 find_package + FetchContent 两个就够用,其余的知道存在即可。

官方文档是“字典“,不是“路线图“ 文档按命令/变量/属性组织,读了不会形成“项目该怎么分层、目录怎么放、哪些用 target 属性哪些用 cache 变量“的结构感。速通的关键是对照真实小项目读,而不是线性读文档。

调试体验差 报错往往信息量低(“No rule to make target”、policy 警告、IMPORTED_LOCATION 未设置)。你得会 cmake –trace、message() 打日志、–debug-output,否则卡住时只能瞎猜。