我正在研究如何制作'工作,我遇到了一点奇怪
假设我的文件夹只包含' 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,我本以为它会失败。"规则告诉它如何编译所述文件。为什么它会按照自己的意愿运行第一个命令?
由于
答案 0 :(得分:3)
原因是隐式规则。
从GNU Make手册:
隐含规则告诉你如何使用习惯技术 当您想要使用它们时,不必详细指定它们。对于 例如,C编译有一个隐式规则。文件名 确定运行哪些隐式规则。例如,C编译 通常采用.c文件并生成.o文件。所以make适用于 C编译在看到这种文件组合时的隐式规则 名字结尾。
换句话说,即使您没有指定适当的规则,make也知道如何从 helloworld.c 构建 helloworld.o 。
要获得有关此主题的更多信息,您可以关注GNU Make manual,尤其是第10部分,该部分专门讨论隐式规则的使用。