GNU制作嵌套通用规则

时间:2017-08-17 01:24:10

标签: makefile gnu-make

我使用make来自动化数值实验。通常情况下,我必须模拟依赖于多个参数的数据。

例如,我可能将重建图像的大小作为参数,将噪声级别作为另一个,并将重建算法作为第三个参数。

作为具体案例,我可能希望从数据中的10%和5%相对误差重建512x512和1024x1024图像,所有这四种情况都应该使用FISTA和ISTA算法完成。

我知道如何使用带有%,$ @和$ *的模式,以便在只涉及一个参数时获得我想要的内容。因此,很容易使用FISTA获得1024x1024图像的结果以获得多个错误级别。

但我怎么窝?

1 个答案:

答案 0 :(得分:1)

如果你想要的(不是100%肯定)是循环所有可能的情况,并且如果每个案例的启动命令是:

echo simulate SIZE RELATIVE_ERROR ALGORITHM

然后你可以尝试类似的东西:

# sizes
S := 512 1024
# relative errors
E := 5 10
# algorithms
A := FISTA ISTA
# targets
T :=

.PHONY: all
.DEFAULT_GOAL := all

# $(1): size, $(2): error, $(3): algo
define MY_rule
T += $(1)-$(2)-$(3)
.PHONY: $(1)-$(2)-$(3)

$(1)-$(2)-$(3):
    @echo simulate $(1) $(2) $(3)
endef

$(foreach s,$(S),$(foreach e,$(E),$(foreach a,$(A),$(eval $(call MY_rule,$(s),$(e),$(a))))))

all: $(T)

它使用了高级GNU make功能,foreach-eval-call组合。 This other answer详细解释了这一点。