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

ここから:

ターゲットを更新するためにレシピを実行するときは、レシピの各行に対して新しいサブシェルを呼び出すことによって実行されます...

注意:これは、シェル変数を設定したりcd、各プロセスにローカルなコンテキストを設定するなどのシェルコマンドを呼び出したりしても、レシピの次の行には影響しないことを意味します。次のステートメントに影響を与えるために使用cdする場合は、両方のステートメントを1つのレシピ行に配置します。次にmake、1つのシェルを呼び出して行全体を実行し、シェルはステートメントを順番に実行します。

次のことを試してください。

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