2018年1月25日 上午9:55
最重要的内容:
下面的注释就是我现在对makefile的理解
1 | #一些变量习惯性的放在最前面(下面10行都是变量) |
注:配套的源码在:D:\005_ARM裸机1期加强版\源码文档图片\源码_201180109_添加gcc_pointer_makefile_printf\008_gcc_pointer_Makefile_009\003_Makefile\003_example_009_008
调试过程:
为了体现上面makefile的bug

Makefile的详细笔记:
Makefile目标,伪目标,头文件自动依赖 - Abnor - 博客园
Makefile是根据依赖关系,时间戳和生成规则来判断哪些文件需要更新
makefile每次执行,要保证生成的对象的所有依赖串中的依赖都必须检查一遍是否更新过
Makefile的核心1—规则 :
1
2目标1 : 依赖1 依赖2 ...
[TAB]命令- 指令执行条件:
- 当”目标文件”不存在,
- 某个依赖文件比目标文件”新”,
- 则: 执行”命令”
- 指令执行条件:
Makefile的核心2—规则 :
1
目标2 : 依赖1 依赖2 ...
- 当执行条件成立时,如何找到对应执行的语句?
- 去找 目标1=目标2
- 执行目标2的[TAB]命令
- 当执行条件成立时,如何找到对应执行的语句?
Makefile的语法
- 通配符: %.o
- $@ 表示目标
- $< 表示第1个依赖文件
- $^ 表示所有依赖文件
- 假想目标: .PHONY
- 即时变量、延时变量, export参考文档:
1
2
3
4
5
6
7
8简单变量(即时变量) :
A := xxx # A的值即刻确定,在定义时即确定
B = xxx # B的值使用到时才确定
:= # 即时变量
= # 延时变量
?= # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+= # 附加, 它是即时变量还是延时变量取决于前面的定义
a. 百度搜 “gnu make 于凤昌”
b. 官方文档: http://www.gnu.org/software/make/manual/
Makefile函数
Makefile实例
改进: 支持头文件依赖
Linux Makefile生成*.d依赖文件及 gcc -M -MF -MP等相关选项说明 - CSDN博客1
2
3gcc -M c.c // 打印出依赖
gcc -M -MF c.d c.c // 把依赖写入文件c.d
gcc -c -o c.o c.c -MD -MF c.d // 编译c.o, 把依赖写入文件c.db. 添加CFLAGS