0

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

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

4

4 回答 4

1

对于 C,特定规则可能如下所示:

%.o : %.c
        rules

尝试将其应用于您的扩展程序。

于 2013-04-07T18:51:05.683 回答
1

Make 有几个预定义的隐式规则。您可以使用选项检查正在应用哪些规则make -d。默认规则是

%: %.o    # Link object file
      $(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)
%.o: %.c  # Compile C source code
      $(CC) $(CPPFLAGS) $(CFLAGS) -c

您可以重新定义隐式规则。检查这个来做到这一点。

于 2013-04-08T07:08:06.127 回答
1

COMPILE.c隐式规则的配方是通过,LINK.c等变量在内部定义的。

来自GNU Make 手册的隐式规则目录:

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

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

于 2013-04-08T12:26:30.907 回答
0

GNU make 有一堆内置的隐含规则,它决定它知道如何从你的myprog.c. 您可以为您喜欢的任何内容添加自己的隐式规则。例如,下面的隐含规则告诉 GNU make 它如何.out从文件中生成.myextension文件:

%.out: %.myextension
        @echo Building $@ from $<
        @# do whatever you need here...

将其放入您的 Makefile 中,您将能够运行gmake foo.out, orgmake bar.out或其他任何内容,只要您有匹配foo.myextension的 等,而无需为每个输出指定显式规则。

于 2013-04-09T18:20:35.030 回答