Makefile-需要所有模式匹配

Makefile-需要所有模式匹配,makefile,wildcard,Makefile,Wildcard,我正在尝试编写一个规则,该规则将在程序的每个阶段的输出上调用我的检查脚本,如果该脚本不存在,则使用%.output:%.input规则生成该输出 我尝试检查:$wildcard stage[1234]。输出,但这会导致规则只需要那些已存在的匹配输出文件 我可以定义一个变量,比如TARGETS=stage1.output stage2.output…,但是有没有办法生成一个模式的所有可能匹配项,然后需要它们呢?对于%.output:%.要应用输入规则,您需要这两种匹配项 需要与模式%输出匹配的中间

我正在尝试编写一个规则,该规则将在程序的每个阶段的输出上调用我的检查脚本,如果该脚本不存在,则使用%.output:%.input规则生成该输出

我尝试检查:$wildcard stage[1234]。输出,但这会导致规则只需要那些已存在的匹配输出文件

我可以定义一个变量,比如TARGETS=stage1.output stage2.output…,但是有没有办法生成一个模式的所有可能匹配项,然后需要它们呢?

对于%.output:%.要应用输入规则,您需要这两种匹配项

需要与模式%输出匹配的中间层的目标 相应的%.input文件-预先存在的文件或用于生成该文件的规则 如果您的stage*.input文件已经存在,您可以使用:

INPUTS=$(wildcard stage[1234].input)
TARGETS=$(INPUTS:%.input=%.output)
check: $(TARGETS)
如果您的stage*.input文件不存在,但需要根据类似的模式规则构建,请重新应用相同的原则

如果您的stage*.input是通过更复杂的方式生成的,但假设它们的名称可以通过应用替换模式生成,则只需应用该模式即可。在您的示例中,它类似于:

L:= 1 2 3 4
TARGETS=$(L:%=stage%.output)
如果要在Make中模拟seq Unix实用程序,请参见:

seq = $(if $(word $1,$2),$2,$(call seq,$1,$2 $(words $2 1)))
$(info seq(10)=$(call seq,10))

stage_sount:=7
stages:=$(patsubst %,stage%.output,$(call seq,$(stage_sount)))
$(info stages=$(stages))
all:
输出:

$ make
seq(10)= 1 2 3 4 5 6 7 8 9 10
stages=stage1.output stage2.output stage3.output stage4.output stage5.output stage6.output stage7.output
make: Nothing to be done for 'all'.