make如何自动创建.o文件

时间:2014-03-25 10:27:55

标签: c gcc makefile

我有一个文件hello.c(还没有hello.o) 当我发出命令时

gcc -o hello hello.o

它提供错误gcc: error: hello.o: No such file or directory,但是当我创建包含以下规则的makefile时,

hello: hello.o
    gcc -o hello hello.o

并运行make,它会自动从hello.o创建hello.c,然后成功创建hello个可执行文件。
由于我没有编写命令来从makefile中的hello.c创建hello.o,make怎么知道它应该运行哪个命令?

2 个答案:

答案 0 :(得分:4)

make不仅使用您在makefile中明确添加的规则,还具有隐式规则。您可以在https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html#Catalogue-of-Rules找到完整列表 并且列表中的第一个隐式规则是

  

编译C程序

     

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

答案 1 :(得分:0)

因为make已经在块周围足以让implicit rules关于如何将.c文件转换为.o文件:

  

编译C程序

n.o is made automatically from n.c with a recipe of the form
‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’.