2013-04-07 82 views
0

如果我有一个引用myprog.c的Makefile,如果我没有为myprog.c指定规则,make会自动执行类似$(CC) myprog.c的操作。makefile的新默认行为

我可以重新指定默认行为并添加新的默认行为(例如,对于以myextension结尾的文件)?

回答

0

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等,而无需为每个输出指定明确的规则。

1

对于C特定的规则可能看起来像这样:

%.o : %.c 
     rules 

尝试应用它为您的扩展。

1

品牌有几个预定义的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来做到这一点。隐规则

+0

你也可以删除所有隐含的规则,所以make会清楚地告诉你它是不是可以建立一些东西,而是默默地承担一些事实。请参阅stackoverflow.com/questions/4122831/#4126617 – kebs 2013-04-08 08:54:37

1

食谱在内部通过变量定义如下COMPILE.cLINK.c

从GNU的Catalogue of Implicit Rules章制作手册:

make遵循约定的规则编译。 x源文件使用变量COMPILE.x。同样,从.x文件生成可执行文件的规则使用LINK.x;以及预处理.x文件的规则使用PREPROCESS.x

上面的链接还包含一些预定义的隐式食谱。