10

コンパイルにはVisualStudio2003(VC71)を使用しています。コンパイル時間を短縮するために、ビルドスクリプトを変更して、CPPファイルごとにプリコンパイル済みヘッダー(.pch)ファイルを生成するようにしました。

makefileで使用されるオプション:

/Yc"StdAfx.h"
/Fp"StdAfx.pch"

これにより、ターゲットのコンパイル時間が30%短縮されました。しかし、各CPPファイルのコンパイルのために毎回pchファイルが生成されている場合でも、コンパイラ時間をどのように短縮できるかを誰かが理解するのを手伝ってくれるでしょうか。

また、それは正しいアプローチですか?YcとYuの組み合わせを使用する必要がありますか?pchファイルは少なくとも1回生成する必要があるため、/Yuオプションを使用できません。

4

2 に答える 2

23

問題

使用するヘッダーのリストがあり、変更されないことがわかっているとします。たとえば、Cヘッダー、C ++ヘッダー、Boostヘッダーなどです。

CPPファイルのコンパイルごとにそれらを読み取るには時間がかかります。コンパイラーが同じヘッダーを何度も読み取り、同じヘッダーに対して同じコンパイル結果を何度も生成するため、これは生産的な時間ではありません。

これらのヘッダーが常に同じであることをコンパイラーに通知し、それらを何度も再コンパイルするのではなく、コンパイルされた結果をキャッシュする方法があるはずです。

ソリューション

プリコンパイル済みヘッダーはそれを考慮に入れているので、必要なのは次のことだけです。

  1. これらすべての一般的で不変のインクルードを1つのヘッダーファイル(たとえば、StdAfx.h)に入れます
  2. この1つのヘッダーファイルのみを含む1つの空のCPPファイル(たとえば、StdAfx.cpp)を用意します

そして今、必要なのは、StdAfx.cppが共通の不変のヘッダーを含む空のソースであることをコンパイラーに伝えることです。

ここで、フラグ/Ycと/Yuが使用されます。

  • /Ycフラグを指定してStdAfx.cppファイルをコンパイルします
  • /Yuフラグを使用して他のすべてのCPPファイルをコンパイルします

また、コンパイラは(必要に応じて)StdAfx.cppファイルからプリコンパイル済みヘッダーファイルを生成し、このプリコンパイル済みヘッダーファイルを/Yuでマークされた他のすべてのファイルに再利用します。

ノート

新しいプロジェクトを作成すると、古いバージョンのVisual C ++(正しく覚えていれば6と2003)は、デフォルトでプリコンパイル済みヘッダーをアクティブにします。最近のものは、それらをアクティブ化しないという選択肢を提供します。

PCHが有効なプロジェクトの作業バージョンを作成するには、PCHをアクティブにして新しいVC ++プロジェクトを作成し、コンパイルオプションを検討する必要があります。

PCHの詳細については、次のURLにアクセスしてください。

于 2011-03-03T08:53:02.690 に答える
2

/Yc は、.cpp モジュールの 1 つでのみ使用する必要があります。これは、そのモジュールでプリコンパイル済みヘッダーを作成するように VS に指定します。

プロジェクト内の他のすべての場合は、/Yu を使用します。これは、単に pch を使用することを指定します。

そのための MSDN エントリはここにあります: http://msdn.microsoft.com/en-us/library/szfdksca(v=VS.71).aspx

于 2011-03-03T08:37:01.913 に答える