3

クロスプラットフォーム (Linux と Windows) のプリコンパイル済みヘッダーを C++ で実装した経験のある人は何をしているのでしょうか。Visual Studio で stdafx.h ファイルを使用して何ができるかを考えています。これにより、大量の C++ コードのコンパイル時間を大幅に改善できます。これは、全体で使用される一般的なヘッダー (std/boost/etc ヘッダー) をプリコンパイルすることによって実現します。ある種のフレームワークなどを使用してクロスプラットフォームでこれを実現する方法はありますか?

これをやろうとして、どのような経験をしましたか?

編集

実際に結果として得られる pch を共有するという意味ではありません。pch を生成できるフレームワークと、その特定のプラットフォームでコンパイルされたときに gcc などと同等のものに関心があります。

4

3 に答える 3

4

gcc実装ファイルの代わりにヘッダー ファイルを渡すと、ヘッダーが自動的にプリコンパイルされます。-xオブジェクト コードを生成しようとする場合は、スイッチを追加するだけです。GCC は常にヘッダーの前にファイルを探す.gchので、使い方は簡単です。このページには詳細があります。に追加してMakefile、プロセスを自動化します。

于 2009-02-19T23:23:38.050 に答える
3

Visual Studio のプリコンパイル済みヘッダーは、プリコンパイルする必要があるすべてを含むヘッダー ファイルに基づいており、通常、標準ライブラリなど、ほとんど変更されないヘッダー ファイルが含まれています。設定で「プリコンパイル済みヘッダーを生成する」に設定されているstdafx.cppに接続されており、stdafx.hのみが含まれています。

次に、Visual Studio は、すべてのファイルに最初のプリプロセッサ定義として stdafx.h を含めるように強制します。これは、その前に含まれるヘッダーの問題や、stdafx.h の解析に影響を与える変更された #define マクロの問題を回避するためです。

この動作を g++ にマッピングする最も簡単な方法は、stdafx.h のみをプリコンパイルし、他のヘッダーを通常どおりインクルードすることだと思います。これは、Visual C++ で行うことと似ています。また、stdafx の名前を「precompiled_.h など」のような馬鹿げていない名前に変更することもできます。代わりにこのファイルを使用するように Visual Studio をセットアップするのは簡単です。

g++ の make ファイルを使用してこの種のシステムを実装したところ、ある程度のパフォーマンスが得られましたが、Visual Studio でプリコンパイルされたヘッダーから得られるのと同じ種類のパフォーマンス向上を得ることができませんでした。これは少し前のことで、g++ はその後改善された可能性があります。CMake でプリコンパイル済みヘッダーを使用して Visual Studio プロジェクトを生成することができました。Makefile の生成にはまだ試していませんが、問題はないはずです。

Visual Studio には、コンパイル速度を向上させるための他のトリックがいくつかあります。1 つは、同じ設定の多数の cpp ファイルを 1 つのバッチでコンパイルすることです。これは通常ユニティ ビルド システムと呼ばれるものを使用して手動で行うことができます。このシステムでは、複数の cpp ファイルを 1 つのファイルに含めて一度にビルドし、ヘッダーの解析とディスク io を節約します。

于 2009-02-19T15:08:18.413 に答える
1

プラットフォーム間でプリコンパイル済みヘッダーデータベース(.pchなど)を移植する場合は、プラットフォームごとにヘッダーの内容が異なるため、これは不可能です。

于 2009-02-19T14:55:03.857 に答える