01
Makefile基础入门
什么是Makefile、为什么需要Makefile、核心三要素(目标、依赖、命令)
入门核心概念
02
Makefile语法速览
规则定义、变量赋值(=、:=、?=、+=)、注释、换行与续行
语法变量
03
Makefile变量与宏
自动变量($@、$<、$^)、自定义变量、环境变量、override指令
变量自动变量
04
Makefile函数入门
字符串处理(subst、patsubst、strip)、文件名函数(dir、notdir、suffix、basename)
函数字符串
05
Makefile条件判断
ifeq、ifneq、ifdef、ifndef 使用场景与常见陷阱
条件逻辑
06
Makefile隐含规则
模式规则、静态模式规则、隐含规则链、隐含规则数据库
隐含规则模式
07
Makefile伪目标
.PHONY的作用、常见伪目标(all、clean、install、distclean)
伪目标PHONY
08
Makefile多目标与多规则
一个规则多个目标、一个目标多个规则、双冒号规则
多目标双冒号
09
Makefile文件包含
include指令、-include与sinclude的区别、文件搜索路径
包含include
10
Makefile递归执行
$(MAKE)的使用、递归调用的环境变量传递、避免无限递归
递归MAKE
11
Makefile编译流程
预处理、编译、汇编、链接四阶段,Makefile如何控制各阶段
编译流程
12
Makefile依赖关系
自动生成依赖(gcc -MM)、依赖文件的包含、依赖更新策略
依赖gcc -MM
13
Makefile编译选项
CFLAGS、LDFLAGS、LDLIBS、CPPFLAGS的配置与常见错误
选项CFLAGS
14
Makefile链接错误
未定义引用、重复定义、库顺序问题、静态库与动态库链接
链接错误
15
Makefile头文件问题
头文件路径设置、头文件依赖缺失、头文件修改未重新编译
头文件路径
16
Makefile语法错误
Tab与空格混用、命令前缺少Tab、变量展开错误、括号不匹配
语法Tab
17
Makefile变量展开陷阱
递归展开与立即展开、变量覆盖、变量值为空导致的错误
变量展开陷阱
18
Makefile函数调用错误
函数参数错误、返回值处理不当、嵌套函数调用问题
函数调用
19
Makefile条件判断错误
条件表达式语法错误、空格导致的逻辑错误、嵌套条件问题
条件错误
20
Makefile路径问题
相对路径与绝对路径、VPATH与vpath的使用、路径中包含空格
路径VPATH
21
Makefile并行编译
-j选项的使用、并行编译中的依赖问题、串行化特定目标
并行-j
22
Makefile调试技巧
make -n(空运行)、make -p(打印数据库)、make -d(调试输出)
调试-n
23
Makefile错误信息解读
常见错误码含义、错误信息定位、错误信息中的行号
错误码定位
24
Makefile与交叉编译
交叉编译工具链配置、sysroot设置、多架构编译问题
交叉编译工具链
25
Makefile与第三方库
pkg-config的使用、库搜索路径、库版本冲突
第三方库pkg-config
26
Makefile与Git集成
版本号自动生成、编译时间戳、条件编译(debug/release)
Git版本号
27
Makefile大型项目管理
子目录递归、模块化设计、增量编译优化
大型项目模块化
28
Makefile性能优化
减少不必要的重新编译、使用缓存、并行编译调优
性能缓存
29
Makefile与CMake对比
CMake基础概念、CMakeLists.txt编写、从Makefile迁移到CMake
CMake迁移
30
Makefile实战案例
完整嵌入式项目的Makefile编写、常见问题复盘、最佳实践总结
实战嵌入式