如果我有一个引用myprog.c
的Makefile,如果我没有为myprog.c
指定规则,make会自动执行类似$(CC) myprog.c
的操作。
我可以重新指定默认行为并添加新的默认行为(例如,以myextension
结尾的文件)吗?
答案 0 :(得分:1)
对于C特定规则可能如下所示:
%.o : %.c
rules
尝试将其应用于您的扩展程序。
答案 1 :(得分:1)
Make有几个预先定义的implicit rules。您可以使用make -d
选项查看正在应用的规则。
默认规则是
%: %.o # Link object file
$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)
%.o: %.c # Compile C source code
$(CC) $(CPPFLAGS) $(CFLAGS) -c
您可以重新编写实施规则。检查this即可。
答案 2 :(得分:1)
隐式规则的配方在内部通过COMPILE.c
,LINK.c
等变量定义。
来自GNU Make Manual的Catalogue of Implicit Rules章节:
make
遵循以下惯例:编译 .x 源文件的规则使用变量COMPILE.x
。同样,从 .x 文件生成可执行文件的规则使用LINK.x
;并且预处理 .x 文件的规则使用PREPROCESS.x
。
以上链接还包含一些预定义的隐式配方。
答案 3 :(得分:0)
GNU make有一堆内置的隐式规则,它决定了它如何构建你myprog.c
之外的东西。您可以为自己喜欢的任何内容添加自己的隐式规则。例如,以下隐式规则告诉GNU如何从.out
文件生成.myextension
文件:
%.out: %.myextension
@echo Building $@ from $<
@# do whatever you need here...
将其放入您的Makefile中,只要您拥有匹配的gmake foo.out
等,就可以运行gmake bar.out
或foo.myextension
或其他任何内容,而无需为每个输出指定一个显式规则。