Makefile 具有空配方和空前提的规则以及模式规则

Makefile 具有空配方和空前提的规则以及模式规则,makefile,Makefile,这是make文件的一个片段: main.o : %.o: main.c strlen.h main.h common.h @echo $^ 我的问题是既然main.o有一个空的先决条件和配方,那么为什么模式规则会列出main.o的依赖项呢?如输出所示: main.o : main.c strlen.h main.h common.h 请解释任何身体帮助是感激的 没有配方的规则只是向给定目标添加任何提供的先决条件。换句话说,对于一个给定的目标,只有一条规则具有配方,但是对于同一个目标,可

这是make文件的一个片段:

main.o :

%.o: main.c  strlen.h main.h common.h 
@echo $^
我的问题是既然main.o有一个空的先决条件和配方,那么为什么模式规则会列出main.o的依赖项呢?如输出所示:

main.o : main.c strlen.h main.h common.h

请解释任何身体帮助是感激的

没有配方的规则只是向给定目标添加任何提供的先决条件。换句话说,对于一个给定的目标,只有一条规则具有配方,但是对于同一个目标,可以有任意多条没有配方的规则

这:

foo.o:foo.h
foo.o:bar.h
foo.o:
foo.o:biz.h
foo.o:foo.c
$(CC)-c-o$@$<
从make的角度来看,与此相同:

foo.o: foo.c foo.h bar.h biz.h
        $(CC) -c -o $@ $<
foo.o:foo.c foo.h bar.h biz.h
$(CC)-c-o$@$<

先生!!!!!!!!!!!!!空规则可以在最后一个配方之后,因为我们必须在生成第一个make之后添加许多依赖项。所以基本上我想问的是,我们能不能在最后一行(foo.o:foo.c$(CC)-c-o$@$)之后再加上一条像foo.o:main.h这样的规则,它们可以以任何顺序出现,只要其中只有一个有菜谱。
foo.o: foo.c foo.h bar.h biz.h
        $(CC) -c -o $@ $<