如何在具有多种模式的 Makefile 中制定模式规则?
How to make a pattern rule in a Makefile with multiple patterns?
我想制作一个 GNU Makefile,其中每个目标都像
<dirname>/stamp-<stampname>:
执行了以下命令:
cd <dirname> && make stamp-<stampname>
正如我在这里读到的,所谓的 pattern rules 可以做一些非常相似的事情,例如调用 C 编译器从任何来源生成 .o
-s (.c
):
%.o: %.c
$(CC) -o ...
它们可以解决我的问题,但如您所见,在我的情况下,需要多个 %
指令。理想情况下,如果像
这样的语法元素
%1/stamp-%2:
cd %1 && make stamp-%2
会存在,会解决一切。但事实并非如此。该任务是否存在一些解决方法?
也许是这样的:
STAMPS:=$(shell ls **/stamp-*)
all: $(STAMPS)
.PHONY: $(STAMPS)
$(STAMPS):
cd $(dir $@) && $(MAKE) $(notdir $@)
这假设 stamp-
文件始终存在并且可以使用 ls
收集。如果不是,您将必须手动指定它们,例如STAMPS:=foo/stamp-1 bar/stamp-2 ...
.
我想制作一个 GNU Makefile,其中每个目标都像
<dirname>/stamp-<stampname>:
执行了以下命令:
cd <dirname> && make stamp-<stampname>
正如我在这里读到的,所谓的 pattern rules 可以做一些非常相似的事情,例如调用 C 编译器从任何来源生成 .o
-s (.c
):
%.o: %.c
$(CC) -o ...
它们可以解决我的问题,但如您所见,在我的情况下,需要多个 %
指令。理想情况下,如果像
%1/stamp-%2:
cd %1 && make stamp-%2
会存在,会解决一切。但事实并非如此。该任务是否存在一些解决方法?
也许是这样的:
STAMPS:=$(shell ls **/stamp-*)
all: $(STAMPS)
.PHONY: $(STAMPS)
$(STAMPS):
cd $(dir $@) && $(MAKE) $(notdir $@)
这假设 stamp-
文件始终存在并且可以使用 ls
收集。如果不是,您将必须手动指定它们,例如STAMPS:=foo/stamp-1 bar/stamp-2 ...
.