01
CMake构建性能调优概述
为什么需要关注构建性能 · 构建性能瓶颈分析 · 调优的核心原则
概述瓶颈
02
CMake基础回顾
CMakeLists.txt结构 · 常用命令 · 变量与缓存 · 生成器与构建系统
基础语法
03
构建系统选择
Make vs Ninja vs MSBuild · 不同生成器的性能对比与适用场景
生成器对比
04
并行构建配置
CMAKE_BUILD_PARALLEL_LEVEL · Ninja的并行机制 · Make的-j参数调优
并行Ninja
05
依赖管理优化
target_link_libraries的正确使用 · 避免循环依赖 · 最小化传递依赖
依赖传递
06
预编译头文件(PCH)
PCH原理 · CMake中配置PCH · PCH的收益与陷阱
PCH预编译
07
统一编译(Unity Build)
Unity Build原理 · CMake中启用Unity Build · Unity Build的注意事项
Unity合并
08
编译缓存(CCache)
CCache原理 · CMake集成CCache · CCache命中率优化
缓存ccache
09
分布式编译(Distcc/Incredibuild)
分布式编译架构 · CMake配置分布式编译 · 网络延迟影响
分布式网络
10
链接优化
链接器选择(gold/lld) · 增量链接 · 链接时优化(LTO)的权衡
链接LTO
11
模块化设计
add_subdirectory vs find_package · 库的粒度控制 · 接口库的使用
模块接口库
12
生成器表达式
Generator Expression的高级用法 · 条件编译 · 平台差异化构建
表达式条件
13
自定义目标与命令
add_custom_command/add_custom_target的性能影响 · 避免不必要的重新生成
自定义增量
14
文件监控与增量构建
glob vs 显式文件列表 · file(GLOB)的陷阱 · CMAKE_CONFIGURE_DEPENDS
GLOB监控
15
CMake Presets
CMakePresets.json配置 · 多配置管理 · 预设继承与覆盖
Presets配置
16
工具链文件
Toolchain文件编写 · 交叉编译性能优化 · 缓存工具链检测结果
工具链交叉编译
17
查找依赖(find_package)
find_package的搜索策略 · Config模式 vs Module模式 · 缓存查找结果
findConfig
18
编译选项优化
CMAKE_CXX_FLAGS的精细控制 · 优化级别选择 · 架构特定优化
Flags优化
19
测试构建性能
CTest并行测试 · 测试依赖管理 · 测试资源限制
CTest并行
20
安装与打包优化
install()命令的性能影响 · CPack配置 · 安装时的文件操作优化
installCPack
21
大型项目结构
多仓库管理 · 子模块策略 · 构建层次设计
结构子模块
22
构建时间分析工具
--trace · --profiling-format · Ninja的日志分析 · 可视化构建时间
分析trace
23
CMake脚本性能
cmake -P脚本优化 · 避免低效的循环和字符串操作 · file()命令的高效使用
脚本性能
24
缓存变量管理
缓存变量的作用域 · 避免缓存膨胀 · 清理无用缓存
缓存变量
25
编译器特性检测
CheckCXXSourceCompiles的缓存 · 特性检测的批量处理 · 避免重复检测
检测特性
26
构建类型与配置
Debug vs Release配置差异 · 多配置生成器 · 配置特定优化
DebugRelease
27
第三方库管理
FetchContent vs ExternalProject · 依赖下载缓存 · 离线构建支持
FetchExternal
28
持续集成中的构建优化
CI环境下的缓存策略 · 增量构建在CI中的应用 · 构建矩阵优化
CI缓存
29
常见性能陷阱
滥用add_definitions · 不必要的全局包含 · 过度使用宏
陷阱反模式
30
综合案例与最佳实践
从零优化一个大型CMake项目 · 性能调优checklist · 持续监控构建性能
案例最佳实践