构建系统原理:Make、CMake与Autotools深度比较
📚 共计 30 章节
01
构建系统概述
什么是构建系统、为什么需要构建系统、主流构建系统对比(Make/CMake/Autotools)、核心概念(目标、依赖、规则)
概念
对比
02
Make基础
Makefile基本语法、目标与依赖关系、变量定义与使用、隐式规则与模式规则
语法
入门
03
Make进阶
条件判断、函数使用(wildcard/foreach/call)、多目录项目管理、Makefile调试技巧
函数
调试
04
Make实战
大型C项目Makefile编写、增量编译优化、并行编译(-j参数)、常见Makefile陷阱
实战
优化
05
CMake入门
CMake设计哲学、CMakeLists.txt基本结构、project()与add_executable()、cmake命令与构建流程
CMake
入门
06
CMake变量与缓存
变量作用域、缓存变量(set CACHE)、CMake预设变量、option()与条件编译
变量
缓存
07
CMake目标管理
add_library()静态库与动态库、target_include_directories()、target_link_libraries()、PUBLIC/PRIVATE/INTERFACE
目标
库
08
CMake生成器
Unix Makefiles、Ninja、Visual Studio、Xcode生成器对比、CMAKE_GENERATOR选择、多配置生成器
生成器
跨平台
09
CMake查找依赖
find_package()机制、Config模式与Module模式、编写FindXXX.cmake模块、pkg-config集成
依赖
查找
10
CMake安装与打包
install()命令、CPack打包(DEB/RPM/NSIS)、导出目标(export/install EXPORT)、Config文件生成
安装
CPack
11
CMake测试与CTest
enable_testing()、add_test()、CTest配置、测试覆盖率(gcov/lcov)、CDash集成
测试
CTest
12
CMake高级特性
自定义命令(add_custom_command)、自定义目标(add_custom_target)、生成器表达式、compile_commands.json
高级
自定义
13
CMake实战
现代CMake项目结构(3.0+)、FetchContent管理依赖、Sanitizer集成、跨平台编译最佳实践
实战
现代
14
Autotools入门
GNU构建系统概述、autoconf/automake/libtool关系、configure.ac基本结构、AM_INIT_AUTOMAKE
Autotools
入门
15
Autotools M4宏
AC_ARG_ENABLE/AC_ARG_WITH、AC_CHECK_HEADER/AC_CHECK_LIB、AC_SUBST/AC_DEFINE、自定义M4宏
M4
宏
16
Automake语法
Makefile.am编写、bin_PROGRAMS/lib_LIBRARIES、SOURCES/CFLAGS/LDADD、递归与非递归构建
Automake
语法
17
Libtool详解
共享库版本管理(-version-info)、libtool脚本工作原理、跨平台共享库问题、LT_INIT配置
Libtool
共享库
18
Autotools实战
完整项目配置流程、autoreconf命令、config.status与config.h、交叉编译配置
实战
交叉编译
19
构建系统对比(一)
语法复杂度对比、学习曲线分析、可读性与可维护性、社区生态与文档
对比
语法
20
构建系统对比(二)
跨平台能力对比(Linux/macOS/Windows)、IDE集成支持、增量构建性能、并行构建效率
跨平台
性能
21
构建系统对比(三)
依赖管理能力、第三方库集成、测试框架集成、持续集成适配性
依赖
CI
22
构建系统对比(四)
大型项目扩展性、模块化支持、条件编译灵活性、调试与诊断能力
扩展性
调试
23
Make vs CMake
从Make迁移到CMake的策略、CMake生成Makefile的底层原理、混合使用场景、性能对比数据
迁移
对比
24
CMake vs Autotools
设计理念差异、配置阶段对比(CMake configure vs autoconf)、生成阶段对比、运行时对比
理念
配置
25
Make vs Autotools
传统Unix项目选择、Autotools对Make的封装、GNU编码标准、可移植性对比
Unix
可移植性
26
现代构建趋势
Meson构建系统简介、Bazel构建系统简介、Ninja作为底层构建工具、构建系统选择决策树
Meson
Bazel
27
构建系统与CI/CD
GitLab CI集成CMake、GitHub Actions多平台构建、缓存策略(ccache/sccache)、构建矩阵配置
CI/CD
缓存
28
构建系统调试
Make调试(make -d/--debug)、CMake调试(--trace/--debug-output)、Autotools调试(config.log分析)、常见错误排查
调试
诊断
29
构建系统安全
供应链安全考虑、依赖锁定与版本管理、SBOM生成、构建环境隔离(Docker/容器化构建)
安全
供应链
30
构建系统未来
模块化构建(C++20 Modules)、分布式构建(distcc/icecream)、云端构建(BuildBuddy/Remote Build)、AI辅助构建优化
未来
分布式