如果我有一个引用myprog.c
的Makefile,如果我没有为myprog.c
指定规则,make会自动执行类似$(CC) myprog.c
的操作。makefile的新默认行为
我可以重新指定默认行为并添加新的默认行为(例如,对于以myextension
结尾的文件)?
如果我有一个引用myprog.c
的Makefile,如果我没有为myprog.c
指定规则,make会自动执行类似$(CC) myprog.c
的操作。makefile的新默认行为
我可以重新指定默认行为并添加新的默认行为(例如,对于以myextension
结尾的文件)?
GNU make有一堆内置隐式规则,这就是它如何决定它知道如何从你的myprog.c
中构建出一些东西。你可以为你喜欢的任何内容添加你自己的隐式规则。例如,下面的隐含规则告诉GNU让它如何从.myextension
文件产生.out
文件:
%.out: %.myextension
@echo Building [email protected] from $<
@# do whatever you need here...
丢弃到你的Makefile,你就可以运行gmake foo.out
,或gmake bar.out
,或什么的,只要因为您有匹配的foo.myextension
等,而无需为每个输出指定明确的规则。
对于C特定的规则可能看起来像这样:
%.o : %.c
rules
尝试应用它为您的扩展。
品牌有几个预定义的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来做到这一点。隐规则
食谱在内部通过变量定义如下COMPILE.c
,LINK.c
等
从GNU的Catalogue of Implicit Rules章制作手册:
make
遵循约定的规则编译。 x源文件使用变量COMPILE.x
。同样,从.x文件生成可执行文件的规则使用LINK.x
;以及预处理.x文件的规则使用PREPROCESS.x
。
上面的链接还包含一些预定义的隐式食谱。
你也可以删除所有隐含的规则,所以make会清楚地告诉你它是不是可以建立一些东西,而是默默地承担一些事实。请参阅stackoverflow.com/questions/4122831/#4126617 – kebs 2013-04-08 08:54:37