2012-04-15 24 views
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!!! 

あなたが最後を見ることができるようにエコーは "何もない"です。なにが問題ですか? hereから

+0

私は各レシピのコマンドがサブシェルで呼び出されるので、最初のレシピで定義された「varが」2行目に参照することができないと思われます。これは正しいですか? –

答えて

10

それはターゲットを更新するためのレシピを実行するための時間になると、それらはレシピの各ラインのための新しいサブシェルを呼び出すことによって実行されている...

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

は、以下のことを試してみてください。

all: 
    @for ((i = 0; i < 5; ++i)); do \ 
     var="$$var $$i"; \ 
     echo $$var; \ 
    done; \ 
    echo $$var 
+0

はい、うまくいきます!ありがとう! Makefileには非常に多くのトラップがあります〜 –

+0

@リ –

関連する問題