3.6.6 让make自动推断命令
我们并不需要为编译每个C源程序而在规则中给出相关命令,因为make自身能够判断出来:它有一个隐含规则,该规则会根据目标文件的命名形式使用"cc -c"命令根据相应的.c文件更新对应的.o文件。例如,它会使用命令"cc -c main.c -o main.o"把"main.c"编译成"main.o"。因此我们可以省略.o目标文件规则中的命令。
当一个.c文件被以这种方式自动地使用,那么它也会被自动地添加到先决条件(依赖关系)中。因此我们可以省略规则先决条件中的".c"文件--假定我们同时省略了命令。
下面是包括这两种改变和使用了变量的完整Makefile例子:
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) main.o : defs.h kbd.o : defs.h command.h command.o : defs.h command.h display.o : defs.h buffer.h insert.o : defs.h buffer.h search.o : defs.h buffer.h files.o : defs.h buffer.h command.h utils.o : defs.h clean : -rm edit $(objects) |
这就是我们平时实际编写Makefile文件的样式。因为隐含规则使编译工作变得很方便,所以很重要。我们会经常使用它们。