来自GNU Make Manual我知道 .c
有一条隐含规则程序:
n.o is made automatically from n.c with a recipe of the form ‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’
例如,当我输入 make helloworld
时并且只有一个 helloworld.c
我的工作目录中的文件,我看到执行了以下内容:
cc helloworld.c -o helloworld
如果我输入 make -d helloworld
我从来没有看到 make
寻找中间人helloworld.o
文件。
最后,我没有看到 .o
文件在我的目录下,只有可执行文件。 make
如何如果 .c
的隐式规则,则从源文件构建可执行文件程序说它应该构建一个 .o
文件?
最佳答案
内置数据库中有不同的隐式规则。如果模式规则不明确,make 永远不会反对,因为它总是为它们设置优先级。
在这种情况下,规则 %: %.o
和 %.o: %.c
被规则 %: %.c< 取代
(因为一步胜于两步 ;-)),它编译成可执行文件而无需创建目标文件(是的,gcc 可以做到这一点)。
但是,您可以使用此命令强制创建 .o:
make helloworld.o helloworld
在这里,在 helloworld.o 成功创建后,make 将优先使用 %: %.o
规则而不是 %: %.c
,因此它按预期工作。
关于c - 当隐式规则没有说明可执行文件时,make 如何从 C 源文件构建可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727692/