0

現在、500 を超える個別の .cpp ファイルを含むC++ ライブラリを開発しています。これらはそれぞれコンパイルされ、静的ライブラリにアーカイブされます。並列ビルドの場合でも、これには数分かかります。このコンパイル時間を短縮したいと思います。

各ファイルは平均で 110 行で、1 つまたは 2 つの関数が含まれています。ただし、各 .cpp ファイルには対応する .h ヘッダーがあり、これらは多くの場合、多くの .cpp ファイルに含まれています。たとえば、、 、 などA.hに含まれる場合があります。A.cppB.cppC.cpp

最初に、コンパイル プロセスのプロファイルを作成したいと思います。何をするのにどれくらいの時間が費やされているかを知る方法はありますか? インクルードガードをチェックしてファイルを無視するためだけにヘッダーファイルを開くのに多くの時間が浪費されているのではないかと心配しています。

そのようなことが原因である場合、コンパイル時間を短縮するためのベスト プラクティスは何ですか?

新しいグループ ヘッダーを追加するつもりはありますが、おそらくこの多数のファイルのレイアウトを変更するつもりはありません。これにより、ライブラリが必要に応じてヘッダーのみのライブラリとしても機能できるようになるからです。

4

4 に答える 4

2

そのようなことが原因である場合、コンパイル時間を短縮するためのベスト プラクティスは何ですか?

プリプロセッサが#pragma onceディレクティブをサポートしている場合は、それを使用してください。これにより、.h ファイルが複数回読み込まれないようになります。

そうでない場合は、#include.cpp ファイルでガードを使用します。

あなたが持っていると言う

あ:

#ifndef A_H
#define A_H

...

#endif

A.cpp で次のメソッドを使用できます。

#ifndef A_H
#include "A.h"
#endif

.h ファイルごとにそのパターンを繰り返す必要があります。例えば

#ifndef B_H
#include "B.h"
#endif

#ifndef C_H
#include "C.h"
#endif

#include.cpp ファイルでのガードの使用について詳しくは、What is the function of include guard in .cpp (not in .h)? を参照してください。.

于 2015-07-30T20:45:56.003 に答える
2

すでに行っているかどうかはわかりませんが、ヘッダーにインクルードする代わりに前方宣言を使用すると、コンパイル速度が向上するはずです。詳細については、この質問を参照してください。

可能な限り、インクルードの代わりに前方宣言を使用する必要がありますか?

コンパイル時間を短縮する別の方法は、ccache. 以前のコンパイルの結果をキャッシュします。

https://ccache.samba.org

于 2015-07-30T20:59:34.573 に答える
0

使用するPIMPLパラダイムに合わせてコードを構成します。主なメリットは次の 2 つです。

  • すべての実装 (メンバー変数など) をユーザーから隠すことができます
  • 実装ファイルを変更した場合、「一般に」この領域のみ、完全な再構築ではなく再コンパイルが必要になります。

良い概要については、ここを参照してください

于 2019-08-29T01:08:14.683 に答える