1

C++ Builder 6 が常にすべてのファイルをコンパイルするのはなぜですか?

1 つのファイルにいくつかの変更を加えましたが、BCB 6 はアプリを起動するとすべてのファイルをコンパイルします。何か案が?Windows XP SP2 を使用しています。

4

5 に答える 5

1

すべてまたは多くのファイルを特定のモジュールに依存させましたか?

特定のモジュールに依存するファイルは、モジュール クラス構造 (.h ファイルに含まれる) が変更されるたびに再構築されます。たとえば、他の多くのモジュールからアクセスされるデータ モジュールがある場合、データ モジュールのクラス構造が変更されるたびに、すべての依存モジュールが再構築されます。

于 2008-09-18T19:49:09.380 に答える
1

ソース ファイルとバイナリ オブジェクトは同じマシン上にありますか? そうでない場合は、ネットワーク時刻の同期に問題があるようです。

ヘッダー ファイルの問題である可能性が最も高い場合は、コンパイラ インクルード ファイルが将来のある時点で変更された日付を持っているか、アプリケーションが、COM インポートなどのコンパイル中に変更されるヘッダー ファイルに依存しています。

編集: VS には常に再コンパイルするフラグが設定されていることを確認してください。これは、設定してから設定解除すると、BCB にも当てはまる可能性があります。もう 1 つの可能性は、プリコンパイル済みヘッダーが、すべてのソース ファイルで生成されるように誤って構成されていることです。

より正確な答えを出すために、私はBCB 6に精通していません。

于 2008-09-18T12:48:17.317 に答える
1

Borland には、再コンパイルされるコード行数を制御するプラグマがあります。

過去数年間、私は(いくつかのプロジェクトで)自分のソースの変更のみがコンパイルされるように管理してきました。これがボーランドの新しいバージョンで機能するかどうかはわかりません

Borland 6 にはプラグマ「hdrstop」があります。これは、プロジェクト オプション「Pre-Compile headers」が「none」でない場合にのみアクティブになります。

数年前、私は非常に遅いコンピューターを使用していましたが、次のトリックでコンパイル時間を数時間から数分に短縮しました

すべての cpps がこの最初の行になりました

#include "all.h"
#pragma hdrstop

デフォルトは「vcl.h」のインクルードでした

「all.h」には、必要なすべてのヘッダーが含まれます。ユニット。すべてのユニットは、 pragma hdrstop ののヘッダーに依存するすべてのソースをスキップします。

例:

Unit1.h

 #include <string>

Unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

Unit2.h

 #include <vcl>

Unit2.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit2.h"

all.h

   #include <string>
   #include <vcl>

輸入中

  1. ヘッダーファイルで all.h を使用しないでください
  2. のように、プロジェクト ヘッダーで使用されるすべてのインクルードを追加できます。
  3. 「コンパイル済みヘッダー」に依存するすべてのソースは、再度コンパイルされません!
  4. プリコンパイル済みヘッダーの生成は遅くなります! そのため、頻繁に変更されることのない all.h にのみヘッダーを追加してください。システム ヘッダーまたは既に完成しているヘッダーのように。
  5. コンパイルが失敗する可能性があります。インクルードの順序によって、コンパイルの「デッドロック」が発生することがあります。その場合は、「プリコンパイル済みヘッダー」を無効にします。Java のように C++ を記述すれば、ほとんどの問題は解決されます。すべてのクラスが独自のファイル (cpp と h) になります。
  6. プロジェクト オプション "Pre-Compiled headers" のファイル名は、実際のプリコンパイル済みファイルのベース名を示します。"pragma hdrstop" の前に (正確に) 同じインクルードがある場合、ユニットはプリコンパイル済みファイルを別のユニットと共有できます。接尾辞が数値のファイルが 1 つしかない場合、最高のパフォーマンスが得られます。複数のプリコンパイル済みヘッダーの例:

Unit1.h

 #include <string>

Unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

Unit2.h

 #include <vcl>

Unit2.cpp

   #include <vcl> //!!!!!!!!!!!!!!!!!!! produce a second version of an precompiled file
   #pragma hdrstop

   #include "Unit2.h"

all.h

  #include <string>
  #include <vcl>
于 2009-07-03T21:45:58.050 に答える
1

BCB コンパイラ用のこのプラグインを試してください: Bcc32Pch IDE プラグイン

于 2008-09-18T13:14:02.250 に答える
0

必要な場合を除き、「build」コマンドではなく「make」コマンドを使用していることを確認してください。

Borland ツールを使用してプロジェクトを作成すると、常にその問題が発生するように思われます。つまり、どのツールが変更されたかに必ずしも気付かず、すべてをコンパイルし始めるという問題です。

Pre-Compiled Headers オプションを確認すると、処理速度が向上する可能性があります。

Borland/CodeGear が C++Builder 2007 以降で MSBuild システムに切り替えたとき、コンパイルははるかに高速になり、より効率的になりました。

于 2008-09-18T13:14:03.230 に答える