在 Makefile 中定义自定义后缀规则



Make 可以使用 cc -c 自动创建 .o 文件,对应于 .c 文件。这些规则已内置到 make 中,你可以利用此优势来缩短 Makefile。如果你仅在 Makefile 中的依赖关系行中指出了 Makefile 所依赖的 .h 文件,make 会知道它也需要相应的 .c 文件。你无需输入编译器命令。

这样会进一步精简 Makefile,如下所示:-

OBJECTS = main.o hello.o factorial.o
hello: $(OBJECTS)
   cc $(OBJECTS) -o hello
hellp.o: functions.h

main.o: functions.h 
factorial.o: functions.h 

make 使用名为 .SUFFIXES 的特殊目标,让你可以定义自己的后缀。例如,参见下面给出的依赖项行:-

.SUFFIXES: .foo .bar

它告知 make 你将使用这些特殊后缀来制定自己的规则。

make 已知从 .c 文件生成 .o 文件的方式类似,你可以按照以下方式定义规则:-

.foo.bar:
   tr '[A-Z][a-z]' '[N-Z][A-M][n-z][a-m]' < $< > $@
.c.o:
   $(CC) $(CFLAGS) -c $<

第一个规则让你可以从 .foo 文件创建 .bar 文件。它基本上会扰乱文件。第二个规则是 make 用来从 .c 文件创建 .o 文件的默认规则。

广告