21

Delphi-6 には、ビルドとコンパイルの 2 つのオプションがあります。

プログラムを実行すると、変更されたファイルのみがコンパイルされ、変更されていないファイルには DCU が使用されることを知っています。ビルドをクリックすると、明らかに DCU が再ビルドされます。

私が疑問に思っているのは、リリース用のプログラムを作成する (ビルド設定、条件変数などを変更する) 場合、コンパイルするだけでよいのでしょうか、それとも完全なビルドを行う必要があるのでしょうか?

フルビルドを行わないとどうなりますか? 何か影響はありますか?

4

4 に答える 4

27

@Daisetsu、ビルドとコンパイルの違いは次のとおりです。

ビルドは、ソース コードが利用可能な場合、プロジェクトで使用されているすべてのユニットをコンパイルします。

コンパイルは、変更された使用ユニットのみをコンパイルします。

私の個人的な経験では、コンパイラの構成を変更するときは、プロジェクトのすべてのユニットに変更が反映されるように、アプリケーションのビルドを実行する必要があります。

于 2010-07-13T02:38:45.113 に答える
20

ビルド時、コンパイル時?

コンパイラは、.pas ソース ファイルの日時スタンプが変更された場合 (1,2) にのみ、ユニットを自動的に再コンパイルします。

プロジェクトのその他の状態変更 (ディレクティブ、デバッグ、その他のコンパイラ設定など) では、コンパイラは自動的に再コンパイルしません。そのときは、ビルドを強制する必要があります。

また、日時スタンプがチェックされていないため、.inc またはその他の含まれている ($I) ファイルが変更された場合にも、強制的に再構築する必要があります(3)。

要約すると、ユニットの .pas ファイル以外が変更された場合は、ビルドを行う必要があります。

建物にはいくつかの奇妙なケースがあります。ほとんどの場合、そこにあるように見えても「ユニット xxx が見つかりません」というエラーが発生します。

  1. 1 つは、プロジェクト内のユニットのパスが間違っている場合、または作業ディレクトリが間違っているときに相対パスを使用している場合です。(Delphi debug a wrong unitを参照)
  2. (これについては完全にはわかりません。これは仮説です) CRC (1) のために .dcu が再コンパイルされますが、新しくコンパイルされた dcu は別のディレクトリに配置されます。現在のコンパイルでは (正しい dcu が既にロードされているため) これは問題ではありませんが、後続のコンパイル (依存パッケージなど) で古い dcu ファイルが再び検出され、ソースが not -> エラーになります。 疑わしい場合は、すべての DCU を再帰的に削除して、常にビルド ディレクトリをクリーンアップしてください。
  3. ユニットは、.dpr で間違ったパスで言及されています

(1) Delphi が FPC のようなものである場合、.dcu には、依存するすべての dcu のインターフェイス セクションの CRC が含まれます。これは、再コンパイルが必要かどうかを確認するためにも使用できます。たとえば、ファイルシステムの操作 (dcu の移動) が原因である

(2) 専門家の方は {$implicitbuild xx} もご覧ください

(3) Delphi とは異なり、FPC は .inc の変更時に再構築します。FPC プロジェクトは内部で .inc ファイルを頻繁に使用します。この変更は、Delphi のサポートが開始される前から行われています。その結果、"defines" inc ファイルを任意のディレクトリにコピーするパッケージは、通常、サイズと CRC がわずかに異なるため、FPC でコンパイルされません。Indy (10) はこの良い例です。

于 2010-07-13T09:07:02.793 に答える
3

リリースを準備するときは、必ずフルビルドを実行する必要があります。
そうしない言い訳はありません。Delphiのコンパイラは十分に高速です。

再現性のあるリリースの重要性を明確にする

  • リリースを準備するとき、他の人が使用する製品のバージョンがあります。
  • 問題が報告された場合は、そのバージョンに戻って問題をテストおよび修正する必要があります。
  • フルビルドを行わ、代わりに既存のDCUに依存している場合は、ソースファイルの1つが再コンパイルされなかっ た可能性があります。
  • その可能性がかなり低い場合でも、その可能性は問題を迅速に解決する能力を深刻に妨げる可能性があります。
  • この問題は、システムが大きくなり、相互依存性が高まり、「実際にサポートされる」バージョンが増えるにつれて悪化します。

あなた自身の正気のために、私はあなたがリリース可能なバージョンのために常にフルビルドをすることを強くお勧めします。
リリース不可能なバージョンでも、定期的にフルビルドを実行します。

于 2010-07-13T13:25:38.580 に答える
3

設定を変更するときは、常にビルドする必要があります。

以前にコンパイルされた DCU ファイルは、コンパイラ定義などの異なる設定でコンパイルされている可能性があります。これにより、同じプロジェクト内の 2 つのユニットが異なる設定でコンパイルされる可能性があります。

于 2010-07-13T02:34:13.530 に答える