2.5 让make推导配方
不必详细说明编译各个C源文件的规则,因为make工具能够自行推断出来:它有一条隐式规则,即使用“cc -c”命令从同名的“.c”文件更新“.o”文件。例如,它会使用“cc -c main.c -o main.o”这条规则将main.c编译成main.o。因此,我们可以在目标文件的规则中省略这些规则。参见使用隐式规则。
当一个‘.c’文件以这种方式被自动使用时,它也会被自动添加到先决条件列表中。因此,只要我们省略规则,就可以从先决条件中省略‘.c’文件。
以下是包含这两处修改以及如上文所建议的变量objects的完整示例:
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
.PHONY : clean
clean :
rm edit $(objects)
这就是我们在实际操作中编写Makefile的方式。(与“clean”相关的复杂情况在其他地方有描述。参见伪目标和配方中的错误。)
由于隐式规则非常便捷,所以它们很重要。你会经常看到它们被使用。