Makefile:双重替换

时间:2018-01-19 17:10:29

标签: makefile gnu-make

我正在尝试编写一个用于运行程序的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中取值?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

使用the foreach function

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 _, ,$*))