make:隐式规则,(tail-)递归应用?

时间:2016-05-14 00:55:12

标签: makefile

我有一个计算A.N,其中每个步骤取决于上一步A.N-1(第一步除外)以及另一个顺序计算结果B.N。我想在make文件中表达这种关系:

A.001: calc.script B.001
  $^ > $@

A.%: calc.script B.% A.(%-1) # (%-1) is pseudocode for idea
  $^ > $@

我可以让第二条规则适用于A.002,但它不适用于A.003。我上面用于伪代码部分的方法是:

# ... A.001 rule
define dec = $(shell echo $(1)-1|bc|xargs printf '%03d') # want 3 digit #s
.SECONDEXPANSION:
A.%: calc.script B.% A.$$(call dec,$$*)
  $$^ > $$@

这种方法有语言支持吗?我正在考虑使用$(foreach ..., $(eval $(call ...)))构造来构建规则,但我更喜欢递归方法。

1 个答案:

答案 0 :(得分:1)

来自the manual

"No single implicit rule can appear more than once in a chain."

这是一个功能,而不是一个bug。你想要的那种递归在Make中是可能的,但Make并不适合它。