首页 > 解决方案 > 当隐式规则没有说明可执行文件时,make 如何从 C 源文件构建可执行文件?

问题描述

GNU Make Manual我了解到程序有一个隐含的规则.c

no 由 nc 自动生成,配方形式为 '$(CC) $(CPPFLAGS) $(CFLAGS) -c'</p>

例如,当我键入make helloworld并且我的工作目录中只有一个helloworld.c文件时,我看到执行了以下内容:

cc helloworld.c -o helloworld

如果我输入make -d helloworld,我会发现它不会在任何时候make寻找中间helloworld.o文件。

最后,我的目录中没有看到.o文件,只有可执行文件。make如果程序的隐含规则.c说它应该构建一个文件,如何从源文件构建可执行.o文件?

标签: cmakefilecompilationexecutable

解决方案


内置数据库中有不同的隐含规则。如果模式规则不明确,make 永远不会反对,因为它总是为它们设置优先级。

在这种情况下,规则%: %.o%.o: %.c被规则取代%: %.c(因为一步优于两步;-)),它编译成可执行文件而无需创建目标文件(是的,gcc 可以做到这一点)。

但是,您可以使用以下命令强制创建 .o:

make helloworld.o helloworld

在这里,成功创建 helloworld.o 后,make 将优先使用%: %.orule over %: %.c,因此它按预期工作。


推荐阅读