Makefile 范例
我们通过两个 Makefile 范例,进一步理解编写 Makefile 规则,以及 Makefile 的运行过程。
1. 执行多个目标范例
.PHONY: cleanall cleanobj cleandiff cleanall : cleanobj cleandiff rm program cleanobj : rm *.o cleandiff : rm *.diff
上面代码可以调用不同目标,删除不同后缀名的文件,也可以调用一个目标(cleanall),删除所有指定类型的文件。
.PHONY 定义了三个伪目标:cleanall cleanobj cleandiff。
- 运行 make cleanobj,将执行 rm *.o,删除后缀为 o 的中间文件。
- 运行 make cleandiff,将执行 rm *.diff,删除后缀为 diff 的中间文件。
- 运行 make cleanall,将先执行 make cleanobj 和 cleandiff,再执行 rm program。
如果运行 make,后面不跟参数,那么将执行第一条规则 cleanall。
2. 编译C语言项目范例
edit : main.o kbd.o command.o display.o cc -o edit main.o kbd.o command.o display.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h cc -c display.c .PHONY: clean clean : rm edit main.o kbd.o command.o display.o
执行 make 或者 make edit,将编译链接整个工程,生成 edit 可执行文件。
clean 是伪目标,用于清理中间文件 *.o,但运行 make 或者 make edit 时不会被执行,因为它不是 edit 规则的前置条件。
如果将第一条规则修改为以下内容,那么 clean 规则将会被执行。
edit : main.o kbd.o command.o display.o clean