c - 为什么 * 和 % 在这条规则中表现不同?
问题描述
我试图让每个目标文件都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
编辑:我澄清了我的问题,对任何混淆表示歉意。
解决方案
在%
目标模式匹配时,%
先决条件中的 将扩展到目标中的匹配部分。
例如,假设您有一个规则
%.o: %.c
$(CC) $(CFLAGS) -c $^
当foo.o
匹配规则目标 ( %.o
) 时,前提是foo.c
.
这在例如 GNU Make 手册的“模式规则简介”部分中进行了解释,并且在所有 make 变体中的工作方式都相同。