1 つの兆候は、ターゲットが存在しないことです。これを理解してください。
もう 1 つは、ターゲットと前提条件の変更タイムスタンプを比較することです。詳細はどのように機能しますか? ターゲットと前提条件のタイムスタンプを比較するロジックと、複数の前提条件がある場合の仕組みは?
1 つの兆候は、ターゲットが存在しないことです。これを理解してください。
もう 1 つは、ターゲットと前提条件の変更タイムスタンプを比較することです。詳細はどのように機能しますか? ターゲットと前提条件のタイムスタンプを比較するロジックと、複数の前提条件がある場合の仕組みは?
make
最初にターゲットの変更時刻を取得し、次にその値を各前提条件の変更時刻と比較します。左から右の順序で、ターゲットよりも新しい前提条件が見つかるとすぐに停止します (新しい前提条件が 1 つあれば十分であるため)。ターゲットを再構築する必要があります)。
たとえば、次のようなルールがあるとします。
foo: bar baz boo
さらに、これらのファイルの変更時刻が次のようになっているとします。
foo: 4
bar: 3
baz: 6
boo: 2
この場合、(4) の変更時刻と(3)make
の変更時刻を比較します。は古いので、次に進み、 (4) の変更時刻と(6)の変更時刻を比較します。が新しいため、再構築する必要があると判断し、の前提条件のチェックを停止します(したがって、決してチェックされません)。foo
bar
bar
make
foo
baz
baz
make
foo
foo
boo
次のように、出力ターゲットに複数の依存関係行がある場合:
foo: bar baz
foo: boo
2 番目以降の依存関係の行の前提条件は、出力ターゲットの前提条件のリストの末尾に単純に追加されます。つまり、この例は、上記の最初の例とまったく同じです。
一般に、すべてのmake
バリアントはこのように動作しますが、一部のバリアントにはこの動作を変更する拡張機能があります (たとえば、GNU make には順序のみの前提条件が含まれ、Sun make には「状態を維持する」機能があるなど)。
Unix の make には、ターゲットを再構築する必要があるかどうかを判断するためのかなり複雑な推論規則があります。GNU make の場合、Makefile を持たないディレクトリで「make -p」を実行すると、それらをダンプできます。
また、ルールを連鎖させることもできます。詳細については、こちらをご覧ください
標準の Unix make と Microsoft nmake は同様の方法で動作します