首页 > 解决方案 > 为什么 * 和 % 在这条规则中表现不同?

问题描述

我试图让每个目标文件都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

编辑:我澄清了我的问题,对任何混淆表示歉意。

标签: cmakefile

解决方案


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

例如,假设您有一个规则

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

foo.o匹配规则目标 ( %.o) 时,前提是foo.c.

这在例如 GNU Make 手册的“模式规则简介”部分中进行了解释,并且在所有 make 变体中的工作方式都相同。


推荐阅读