这是一个简化的 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!!!
正如你所看到的,最后的回声是“NOTHING”。怎么了?
From 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)