2017-08-22 4 views
0

GNU makeドキュメンテーションのUsing Variablesセクションを読んでいますが、複数回定義されたときにmakeの変数がどのように展開されるのか理解できませんでした。makefile変数を複数回定義する

参照、例えば、以下の短いメイクファイル:makeを実行している場合は、次の出力が得

.PHONY: run 
run: a b 

TARGET := a 

$(TARGET): 
    echo $(TARGET) 
    touch [email protected] 

TARGET := b 

$(TARGET): 
    echo $(TARGET) 
    touch [email protected] 

echo b 
b 
touch a 
echo b 
b 
touch b 

aのターゲット、および自動があるようです変数[email protected]は実際にはaです。しかし、TARGETという変数をエコーすると、ターゲット名でも同様にbが表示されます...ここではどうなっていますか? 私は、この動作を明確にするために、ドキュメントにリンクすることをおすすめします。おそらく関連している

その他の質問:

  1. makeが呼び出されたときに一度だけ読んメイクですか?
  2. メークファイルを読み込んだら、後での名前をに展開していますか?
  3. メークファイルを読み込んだら、またはそれ以降にターゲットに展開されていますか?注

:再帰的に展開変数を使用して上記の例の出力を変化させない(つまり=:=を変えること、です)。

+4

これをバックアップするためのドキュメントリファレンスはありませんが、1)はい、2)Makeがファイルを読み込むときに名前が展開されるので、最初のルールの名前は 'a'であり、ルールが実行されたときにのみレシピ(ルール内のコマンド)が展開され、その時点までには「ターゲット」が「b」である。 – Beta

+0

@Betaそれは完全に正しいです、私はあなたがそれに答えるべきだと思います。 –

答えて

関連する問題