我正在尝试编写一个用于运行程序的makefile,其中包含两个变量的所有可能设置,这些变量在同一个集合中取值:
如果有一个变量,我可以这样做:
LAMBDAS = 0.01 0.015 0.02 0.025 0.03 ..
RESULTS = $(patsubst %,results_%,$(LAMBDAS))
lambdas: $(RESULTS)
results_%:
./program_to_run --param1 $(patsubst results_%,%,$@) > $@
如何扩展此设置以处理两个参数,两个参数都在LAMBDAS中取值?谢谢你的帮助。
答案 0 :(得分:1)
ALPHA := a b c
NUMER := 1 2 3
RESULTS := $(foreach A, $(ALPHA),$(addprefix results_$(A), $(NUMER)))
另请注意,您可以更清晰地编写模式规则:
results_%:
./program_to_run --param1 $* > $@
编辑:如果要在命令中分隔两个参数,请在构造RESULTS
时在它们之间添加一个字符:
RESULTS := $(foreach A, $(ALPHA),$(addprefix results_$(A)_, $(NUMER)))
然后在命令中将它们分开,这很痛苦,因为像Make中的许多内容一样,patsubst
无法同时处理两个通配符。
如果参数数量很少,这是一个非常好的方法:
results_%:
@echo -p1 $(word 1, $(subst _, ,$*)) -p2 $(word 2, $(subst _, ,$*))