这是一个简化的Makefile:
all:
@for (( i = 0; i < 5; ++i )); do \
var="$$var $$i"; \
echo $$var; \
done
@echo $$var
我认为“var”的值是“0 1 2 3 4”,但输出是:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
<--- NOTHING!!!
正如你所看到的,最后一个回声是“没什么”。有什么问题?
答案 0 :(得分:11)
来自here:
当需要执行配方来更新目标时,通过为配方的每一行调用一个新的子shell来执行它们...
请注意:这意味着设置shell变量并调用shell命令(例如
cd
,为每个进程设置本地上下文)不会影响配方中的以下行。如果要使用cd
来影响下一个语句,请将两个语句放在一个配方行中。然后make
将调用一个shell来运行整行,shell将按顺序执行语句。
尝试以下方法:
all:
@for (( i = 0; i < 5; ++i )); do \
var="$$var $$i"; \
echo $$var; \
done; \
echo $$var