Makefile 规则与源文件和目标文件

Makefile rules vs source and object files

我正在研究 'make' 是如何工作的,我遇到了一些奇怪的事情

假设我有一个只有 'helloworld.c' 和 'Makefile'

的文件夹

Makefile 包含

helloworld: helloworld.o
    gcc -o helloworld helloworld.o

'make' 在 bash 控制台中的输出是

cc -c -o helloworld.o helloworld.c

gcc -o helloworld helloworld.o

规则 "helloworld" 取决于不存在的文件 "helloworld.o",因此 make 创建它(输出的第一行)。

但是为什么呢?

我原以为它会失败,因为没有 "helloworld.o:" 规则告诉它如何编译所述文件。为什么它运行第一个出于自己意愿的命令?

谢谢

原因是隐式规则

来自 GNU Make 手册:

Implicit rules tell make how to use customary techniques so that you do not have to specify them in detail when you want to use them. For example, there is an implicit rule for C compilation. File names determine which implicit rules are run. For example, C compilation typically takes a .c file and makes a .o file. So make applies the implicit rule for C compilation when it sees this combination of file name endings.

换句话说,make 知道如何从 helloworld.c 构建 helloworld.o,即使你不知道t 指定适当的规则。

要获得有关此主题的更多信息,您可以关注 GNU Make manual,尤其是第 10 节,该节专门讨论隐式规则的使用。