makefile的新默认acton

时间:2013-04-07 18:47:22

标签: makefile gnu-make

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

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

4 个答案:

答案 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.cLINK.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.outfoo.myextension或其他任何内容,而无需为每个输出指定一个显式规则。