回顾一下上篇文章的内容,makefile的意义:
1. makefile用于定义源文件之间的依赖关系;
2. makefile说明如何编译各个源文件并生成可执行文件。
1、依赖的定义
targets : prerequisites ; command1
command2
语法:
(1)分号是将依赖和命令隔开;
(2)冒号是将目标和依赖隔开;
(3)命令可以写在下一行,这时就不要分号。注意command2前面是Tab键,不是空格键。
各个元素的含义:
元素 | 含义 |
---|---|
targets | 通常是需要生成的目标文件名;make所需执行的命令名称;可以包含多个目标,使用空格对多个目标名进行分隔 |
prerequisites | 当前目标所依赖的其他目标或文件;可以包含多个依赖,使用空格对多个依赖进行分隔 |
command | 完成目标所需要执行的命令 |
规格中的注意事项:
- Tab键
(1)每个命令行必须以Tab字符开始
(2)Tab字符告诉make此行是一个命令行 - 续行符:\
(1)可以将内容分开写到下一行,提高可读性
2、依赖示例
all : test
@echo "make all"
test :
@echo "make test"
依赖规则
(1)当目标对应的文件不存在,执行对应命令;
(2)当依赖在时间上比目标新,执行对应命令;
(3)当依赖关系连续发生时,对比依赖链上的每一个目标。
小技巧
工程开发中可以将最终可执行文件名和all同时作为makefile中的第一条规则的目标
hello.out all : main.o func.o
gcc -o hello.out main.o func.o
Conclusion:
- makefile用于定义源文件间的依赖关系;
- makefile说明如何编译各个源文件并生成可执行文件;
- makefile中的目标之间存在连续依赖关系;
- 依赖存在并且命令执行成功是目标完成的充要条件。