4

nmake.exe推論ルールの検索が 1 つの欠落ファイルに制限されていることに気付きました。この問題について Web 上で言及されているものは見つかりませんでした。何か不足していますか?

$ cat Makefile
.サフィックス: .a .b .d .e

すべて: abc.e

.ab:
        $** $@ をコピー

.bd:
        $** $@ をコピー

.de:
        $** $@ をコピー

$タッチabc.a

$ nmake
NMAKE : 致命的なエラー U1073: 'abc.e' の作成方法がわかりません
止まる。

$ nmake -n abc.a
「abc.a」は最新です

$ nmake -n abc.b
        abc.a abc.b をコピー

$ nmake -n abc.d
NMAKE : 致命的なエラー U1073: 'abc.d' の作成方法がわかりません
止まる。

この同じ Makefile は、GNU make で次のように生成されます。

$ make -n
abc* abc.b をコピーします
abc* abc.d をコピーします
abc* abc.e をコピーします
rm abc.b abc.d

もちろん、$**マクロとcopyコマンドは GNU make ではあまり役に立ちません。;-)

お使いのバージョンの は、nmake.exeこれをより適切に処理しますか? マジックスイッチはありますか?それとも、見た目ほど壊れているのでしょうか?

4

1 に答える 1

5

ここでの問題は、ビルド プロセスで複数ステップの操作を追跡することです。ソース ファイルは何らかの中間ファイルを生成し、最終的なビルド出力を生成します。悪い世界では、ソース ファイルに変更を加えても、中間ファイルの古いバージョンから最終的なバイナリがビルドされる可能性があります。明らかに、それは悪いことです。

GNU make は、依存関係ツリー全体を一度にモデル化し、変更されたファイルを出力まで追跡するというアプローチを採用しています。これは、使用するビルド ツールが make だけの場合に最適です。非常に大きなプロジェクトの場合、これはうまく機能しないため、特定の順序で作成する必要があります。「make」がビルド プロセスの一部のツールをサポートしていない場合、これはうまく機能しないため、いずれにせよ複数回 make を実行する必要があります。

nmake.exe は、可能な限り単純なことを行うアプローチを採用しています。つまり、一度に 1 つのパスのみを実行します。これは、より大きなツール チェーンの一部になることを前提としています。したがって、マルチパスの依存関係がある場合は、nmake の複数のパスが必要になります。ビルド プロセスで 3 回以上のパスが必要な場合は、おそらく悪いことをしている可能性があり、プロセスを修正する必要があります。そして、大声で叫ぶために、複数のパスが必要な場合は、スクリプトを記述してください。

于 2011-02-19T03:22:20.540 に答える