我尝试编写一条规则,在我程序的每个阶段的输出上调用我的检查脚本,如果使用我的%.output : %.input
规则尚不存在,则生成该输出。
我尝试了check : $(wildcard stage[1234].output)
,但这会导致规则只需要已经存在的匹配输出文件。
我可以定义一个像TARGETS = stage1.output stage2.output ...
这样的变量,但有没有办法生成模式的所有可能匹配然后需要它们?
答案 0 :(得分:1)
要申请%.output : %.input
规则,您需要两者
%.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)
答案 1 :(得分:0)
如果你想在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'.