当隐式规则对可执行文件没有任何说明时,make如何从C源文件构建可执行文件?

问题描述 投票:0回答:2

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

n.o是从n.c自动生成的,形式为'$(CC)$(CPPFLAGS)$(CFLAGS)-c'

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

cc helloworld.c -o helloworld

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

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

c makefile compilation executable
2个回答
2
投票

内置数据库中有不同的隐式规则。如果模式规则含糊不清,那就永远不要反对,因为它总是为它们设定优先级。

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

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

make helloworld.o helloworld

在helloworld.o成功创建之后,make会更喜欢%: %.o统治%: %.c,所以它按预期工作。


1
投票

有许多隐含的规则。在这种情况下,有一个用于直接从C文件构建可执行文件。在make -d helloworld的输出中你应该看到类似的东西:

尝试隐含的先决条件'helloworld.c'。

找到了'helloworld'的隐含规则。

© www.soinside.com 2019 - 2024. All rights reserved.