可能重复:
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中计算的东西,但最终我还是要更新变量。也许我应该尝试更新文件而不是每次迭代,只需从文件中读取?
感谢您的时间。
答案 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