为什么*和%在此规则中表现不同?

时间:2019-01-08 23:43:37

标签: c makefile

我试图使每个对象文件foo.o依赖于其源文件foo.c。出于某种原因,使用*使每个依赖于每个源文件(这样foo.o依赖于foo.c, bar.c, etc.可以工作,但是使用%会出错。

我的目录结构现在只有一个源文件,但是我打算添加更多。我得到的错误是:

$(PATHO)%.o:: $(PATHT)*.c  # This compiles properly
  recipe

$(PATHO)%.o:: $(PATHT)%.c  # This causes error 'No rule to make target'
  recipe

编辑:我澄清了我的问题,对于造成任何混淆,我们深表歉意。

1 个答案:

答案 0 :(得分:0)

当目标模式中的%匹配时,先决条件中的%会扩展到目标中的匹配部分。

例如,假设您有一条规则

%.o: %.c
    $(CC) $(CFLAGS) -c $^

foo.o与规则目标(%.o)匹配时,先决条件是foo.c

例如在《 GNU Make手册》第Introduction to Pattern Rules节中对此进行了说明,并且在所有make变体中都相同。