Makefile:更新变量

时间:2011-12-22 15:08:46

标签: variables makefile while-loop

  

可能重复:
  arithmetic in a Makefile

我是一个使用Makefile的初学者。我想更新一个变量,或多或少:

LEVEL=0

train:
     while (eval_score > previous_eval_score)
     make iterate

iterate:
     do stuff
     write files to /path/to/$(LEVEL)/asdf.txt
     $(LEVEL)++

换句话说,每次迭代都会将一些文件写入目录,首先写入/ path / to / 0,然后写入/ path / to / 1等,直到达到某个阈值。

显然,不允许在函数内更新或重新分配变量。我已经搜索了一段时间,但找不到任何满意的答案。也许我有,但我不明白一切。我也试过像在bash中计算的东西,但最终我还是要更新变量。也许我应该尝试更新文件而不是每次迭代,只需从文件中读取?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

Makefile的主要问题是每个make iterate产生一个子make,它可以更新它的环境变量,但不会影响父make,因此对下一次迭代没有影响。此外,您无法从规则中更新变量,但这是次要问题。

您可以像建议的那样进行迭代make,并通过shell递增级别:

train:
    LEVEL=0; while need_more_iterations; do \
       $(MAKE) LEVEL=$$LEVEL iterate; \
       LEVEL=`echo $$LEVEL + 1 | bc`; \
    done