6

这是一个简化的 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”。怎么了?

4

1 回答 1

11

这里

当需要执行配方来更新目标时,它们是通过为配方的每一行调用一个新的子shell来执行的......

请注意:这意味着设置 shell 变量和调用 shell 命令(例如为cd每个进程设置本地上下文)不会影响配方中的以下行。如果要用于cd影响下一条语句,请将两个语句放在一个配方行中。然后make将调用一个 shell 来运行整行,shell 将按顺序执行语句。

尝试以下操作:

all:
    @for (( i = 0; i < 5; ++i )); do \
         var="$$var $$i"; \
         echo $$var; \
     done; \
    echo $$var
于 2012-04-15T12:56:37.893 回答