我有一个文件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怎么知道它应该运行哪个命令?
答案 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’.