なぜなら、makeはあなたにfoo
をさせるために依存関係を追跡しなければならないからです。
make foo
と入力すると、makeはfoo
というファイルを作成するように要求していると考えます。だからfoo
が存在しない(前提)ので、foo
の作り方を試してみます。あなたはワイルドカードのルールを作った%
は何でも良いオプションがないので、このルールを使ってfoo
を作ることを試みます。 foo
を作成するには、force
の依存関係があります。実行する前に実行する必要があります。foo
を作成してください。ファイルforce
が存在しないため、makeはforce
を作成するためにターゲットを実行する必要があると判断します。
私たちは、出力に関して何かが起こり始めるところに達しました。 force
はforce
のエコーを実行し、次にワイルドカードルールを実行します。エコーはfoo
です。最終的にmakeはfooを作成する準備ができており、コマンドはhello
だけをエコーします。
したがって、実際には、最も外側の依存関係から最初の最後のターゲットまでの順序が逆です。
あなたは離れてforce
その後、ワイルドカードルールの依存関係として取るそこに力を作成するためには何の関係もありませんので、実行されません(foo
をエコー)その体は、しかしhello
が存在しないとして、それが意志決定しますワイルドカードルールfoo
ターゲットの本体を実行してください。
あなたが力目標でファイル力を作るために何かが含まれている場合(例えばtouch force
)あなたが今表示されますfoo
とhello
プリントではなくforce
います。
コマンドラインでフラグ--debug=a
(all)を渡すと、makeの手順が表示されます。
makeの仕組みをよく理解したい場合は、[this](http://www.oreilly.com/openbook/make3/book/index.csp)を読んでください。あなたのスタックオーバーフローの質問。 –