具有空配方和空先决条件和模式规则的规则

Rule with empty recipe and empty prequisite and pattern rule

这是生成文件的片段:

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

请解释任何 body 帮助是感激!!!!!!!

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

这个:

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 $@ $<