プリコンパイル済みヘッダーは、大規模なプロジェクトで多くの時間を節約できるように見えますが、いくつかの落とし穴があるお尻の痛みでもあるようです。
プリコンパイル済みヘッダーを使用することの長所と短所は何ですか?具体的には、Gnu / gcc / Linux環境での使用に関連していますか?
プリコンパイル済みヘッダーは、大規模なプロジェクトで多くの時間を節約できるように見えますが、いくつかの落とし穴があるお尻の痛みでもあるようです。
プリコンパイル済みヘッダーを使用することの長所と短所は何ですか?具体的には、Gnu / gcc / Linux環境での使用に関連していますか?
プリコンパイル済みヘッダーの唯一の潜在的な利点は、ビルドが遅すぎる場合、プリコンパイル済みヘッダーがそれらを高速化する可能性があることです。潜在的な短所:
正しくするためのMakefileの依存関係の増加。それらが間違っている場合、あなたは間違ったものを素早く構築します。良くない。
原則として、すべてのヘッダーをプリコンパイルできるわけではありません。(#includeの前にいくつかの#defineを置くことを考えてください。)では、gccは実際にどのケースで正しいのでしょうか?この最先端の機能をどれだけ信頼したいですか。
ビルドが十分に高速である場合、プリコンパイル済みヘッダーを使用する理由はありません。ビルドが遅すぎる場合は、
GNU / gcc / linuxと話すことはできませんが、vs2005でプリコンパイル済みヘッダーを処理しました。
長所:
短所:
gcc、g ++、gfortran、...へのccacheキャッシングフロントエンドは私にとって素晴らしい働きをします。そのウェブサイトが言うように
ccacheはコンパイラキャッシュです。これは、C / C ++コンパイラーのキャッシング・プリプロセッサーとして機能し、-Eコンパイラー・スイッチとハッシュを使用して、キャッシュからコンパイルが満たされる時期を検出します。これにより、一般的なコンパイルで5〜10倍のスピードアップが得られることがよくあります。
Debian / Ubuntuでは、' 'を実行し、たとえば、を指す名前でapt-get install ccache
ソフトリンクを作成します。/usr/local/bin
gcc
g++
gfortran
c++
/usr/bin/ccache
[編集]いくつかの初期のコメントに応じてこれをより明確にするために:これは、コンパイルステップのより大きなチャンクをキャッシュすることによって、本質的にプリコンパイル済みヘッダーとソースを提供します。そのため、プリコンパイル済みヘッダーに似たアイデアを使用して、さらにそれを実行します。スピードアップは劇的なものになる可能性があります-ウェブサイトが言うように5から10倍。
プレーンCの場合、プリコンパイル済みヘッダーは避けます。あなたが言うように、それらは潜在的に問題を引き起こす可能性があり、前処理時間は通常のコンパイルと比較して本当に短いです。
C ++の場合、プリコンパイル済みヘッダーは、コンパイルに費用がかかる大きなテンプレートコードを含むことが多いため、多くの時間を節約できる可能性があります。私はそれらについて実際的な経験がないので、プロジェクトでどれだけのコンパイルの節約が得られるかを測定することをお勧めします。そのためには、プリコンパイル済みヘッダーを使用してプロジェクト全体を1回コンパイルしてから、1つのオブジェクトファイルを削除し、そのファイルの再コンパイルにかかる時間を測定します。
GNU gccのドキュメントでは、プリコンパイル済みヘッダーで発生する可能性のある落とし穴について説明しています。
ビルドシステムとしてcmakeを使用するQtプロジェクトでPCHを使用していますが、これにより多くの時間を節約できます。PCH cmakeスクリプトをいくつか入手しました。これらはかなり古いため、微調整が必要でしたが、通常、予想よりもセットアップが簡単でした。私は付け加えなければなりません、私はcmakeの専門家ではありません。
Qtの大部分(QtCore、QtGui、QtOpenGL)といくつかの安定したヘッダーを一度に含めています。
長所:
短所: