なぜ最初の前提条件だけが実行されますか?

なぜ最初の前提条件だけが実行されますか?

これがメイクファイルです。

.PHONY: all target1 target2 target
all: target1 target2
target1: NUM = 1
target2: NUM = 2
target1 target2: target
target:
    @echo "this is target ${NUM}"

出力は次のとおりです

this is target 1

なぜ最初の前提条件だけが実行されますか?変数と関係があると思います。ありがとうございます!

ベストアンサー1

Makefileの内容は次のとおりです。

  • すべてのゴールは偽です(つまりディスクのアーティファクトと一致しません。)
  • alltarget1とに依存し、target2最初のターゲットなので、デフォルトのターゲットです。
  • target11に設定NUM(使用ターゲットごとの変数の割り当て);
  • target2NUM2に設定。
  • target1どちらもtarget2以下に依存しますtarget
  • target与えられたコマンドを実行して満足する必要がありますecho

これらの定義を使用して実行すると、make次の結果が生成されます。

  • allそれは偽りで要求するので不満足target1ですtarget2
  • target1false で必須なので満足できませんtargetNUM1 に設定)。
  • target偽で前提条件がないため、満足できない場合はコマンドをmake実行してください。echo
  • target2家具なので満足していませんが、target処理されて何も起こらないので満足です。

ここでやろうとしているように、ターゲットを関数として使用することはできません。一部のMake実装はサポートしています。機能しかし、次は必要ありません。

target1 target2:
    @echo "this is target ${NUM}"

おすすめ記事