1. makefile中元素的含义
- makefile 用于定义源文件之间的依赖关系
- makefile 说明如何编译各个源文件并生成可执行文件
targets :
- 通常是需要生成的目标文件名
- make 所需执行的命令名称
prerequisities :
- 当前目标所依赖的其它目标或文件
command :
- 完成目标所需要执行的命令
规则中的注意事项:
- targets 可以包含多个目标,使用空格对多个目标进行分隔
- prerequisites 可以包含多个依赖,使用空格对多个依赖进行分隔
- [ Tab( \t ) ] 键,每一个命令必须以 [ Tab] 字符开始,[ Tab] 字符告诉 make 此行是一个命令行
- 续行符 [ \ ] 可以将内容分开写到下一行,提高可读性
2. makefile 依赖
依赖规则:
- 当目标对应的文件不存在时,执行对应命令
- 当依赖在时间上比目标更新,执行对应命令
- 当依赖关系连续发生时,对比依赖链上的每一个目标
依赖示例
all : test
echo "make all"
test :
echo "make test"
# 将上述 Demo 保存至 makefile 文件中,执行 make找打顶层目标 all ,all 依赖 test ,由于 test 文件不存在,test 目标下面的命令,接着执行 all 下面的命令
小技巧:makefile 中可以在命令前加上 @ 符,作用为命令无回显
3. makefile 编程案例
makefile文件Demo:
hello,out : main.o func,o
gcc -o hello.out main.o func.o
main.o : main.c
gcc -o main.o -c main.c
func.o : func.c
gcc -o func.o -c func.c
小技巧:工程开发中可以将最终可执行文件名 和 all 同时作为 makefile 中第一条规则的目标,这样当生成的 可执行文件名已经最新,我们仍然可以使用 make all 强制执行
hello,out all : main.o func,o
gcc -o hello.out main.o func.o
4. 总结
- makefile 用于定义源文件之间的依赖关系
- makefile 说明如何编译各个源文件并生成可执行文件
- makefile 中的目标之间存在连续依赖关系
- 依赖存在并且命令执行成功是目标完成的必要条件