01
Makefile入门
什么是Makefile · 为什么需要 · 基本规则与工作原理
基础概念
02
Makefile核心语法
目标、依赖、命令 · 变量定义与引用 · 自动变量
语法变量
03
Makefile变量进阶
赋值方式(= := ?= +=) · 展开时机 · 环境变量与override
变量赋值
04
Makefile条件判断
ifeq/ifneq/ifdef/ifndef · 使用场景与实战案例
条件逻辑
05
Makefile函数基础
字符串处理(subst/patsubst/strip/findstring) · 文件名函数
函数字符串
06
Makefile函数进阶
foreach/if/call/value/shell · 自定义函数
函数高级
07
Makefile隐含规则
隐含规则列表 · 数据库 · 禁用与模式匹配
隐含模式
08
Makefile静态模式
静态模式规则 · filter函数配合 · 多目标构建
静态模式
09
Makefile双冒号规则
双冒号与单冒号区别 · 独立目标 · 并行构建注意
双冒号并行
10
Makefile伪目标
.PHONY作用 · all/clean/install/distclean · 伪目标依赖
伪目标PHONY
11
Makefile文件包含
include指令 · -include/sinclude · 文件搜索 · 自动生成依赖
包含依赖
12
Makefile多目录管理
VPATH/vpath · 目录结构设计 · 递归Make优缺点
多目录VPATH
13
Makefile递归构建
递归调用Make · 传递变量 · 子Makefile通信 · 避免重复构建
递归子Make
14
Makefile库的概念
静态库(.a)与动态库(.so)区别 · 命名规范 · 搜索路径
库概念
15
Makefile静态库构建
ar命令 · 静态库创建与更新 · ranlib与索引
静态库ar
16
Makefile动态库构建
gcc -shared · soname机制 · 版本管理 · ldconfig
动态库soname
17
Makefile链接静态库
-l与-L选项 · 链接顺序 · 静态库依赖传递
链接静态库
18
Makefile链接动态库
运行时链接与加载时链接 · RPATH/RUNPATH · LD_LIBRARY_PATH
动态库RPATH
19
Makefile依赖管理
自动生成依赖(gcc -MM/-MD/-MF) · 依赖合并 · 增量编译
依赖自动
20
Makefile头文件依赖
头文件变化触发重编译 · makedepend · 依赖树可视化
头文件依赖
21
Makefile第三方库集成
pkg-config · 查找库路径 · 版本检测 · 交叉编译适配
第三方pkg-config
22
Makefile大型项目结构
模块化设计 · 顶层/子Makefile · 构建配置分离
项目结构模块
23
Makefile构建配置
config.mk设计 · 条件编译 · 调试/发布切换 · 优化级别
配置条件编译
24
Makefile并行构建
-j选项 · 依赖图分析 · 并行安全 · jobserver机制
并行-j
25
Makefile调试技巧
make -d/-p · info/warning/error函数 · 调试打印
调试技巧
26
Makefile性能优化
减少不必要命令 · 二级扩展 · 缓存变量 · 避免递归
性能优化
27
Makefile与CMake对比
CMake基础 · CMakeLists.txt · 生成Makefile · 迁移策略
CMake对比
28
Makefile实战:C++项目
完整C++项目Makefile · 测试框架集成 · 代码覆盖率
实战C++
29
Makefile最佳实践
命名/注释规范 · 错误处理 · 可移植性 · 安全构建
规范最佳实践
30
Makefile高级主题
GNU Make扩展 · 动态模块 · Docker集成 · CI/CD
高级扩展