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

时间:2016-05-03 12:37:56

标签: gcc compilation makefile gnu-make object-files

我正在研究如何制作'工作,我遇到了一点奇怪

假设我的文件夹只包含' helloworld.c'和' Makefile'

Makefile包含

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

'制作'在bash控制台中是

  

cc -c -o helloworld.o helloworld.c

     

gcc -o helloworld helloworld.o

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

但为什么?

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

由于

1 个答案:

答案 0 :(得分:3)

原因是隐式规则

从GNU Make手册:

  

隐含规则告诉你如何使用习惯技术   当您想要使用它们时,不必详细指定它们。对于   例如,C编译有一个隐式规则。文件名   确定运行哪些隐式规则。例如,C编译   通常采用.c文件并生成.o文件。所以make适用于   C编译在看到这种文件组合时的隐式规则   名字结尾。

换句话说,即使您没有指定适当的规则,make也知道如何从 helloworld.c 构建 helloworld.o

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