プリコンパイルされたヘッダー
-
18-09-2019 - |
質問
Visual C ++ 6にあるサンプルプロジェクト(私のものではありません)があります。VisualStudio2008に変換しようとしています。
古いプロジェクトでは、プリコンパイルヘッダーを使用しています。今、質問は次のとおりです。
プリコンパイルされたヘッダーとは何ですか?
古いプロジェクトはプレリ縮小ヘッダーを使用しているためです。また、Visual Studio 2008(新しいプロジェクト)で使用します。しかし、私はそれを言っているエラーがあります 「stdafx.hを含めるのを忘れましたか」, 、問題を改善するために、すべてのソースファイルに「stdafx.h」を含めます。それは完璧に機能しました。しかし、古いプロジェクトはすべてのファイルに「stdafx.h」を含めていませんでしたか?次に、各ソースファイルに「stdafx.h」を含めるようにオプトアウトするにはどうすればよいですか。すべてのソースファイルが「stdafx.h」で定義されているファイルを含める必要があるわけではないため、ほとんどの場合はわずかです。それはどうですか?
編集: プリコンパイルされたヘッダーを使用することからいくつかのファイルをexlCudeするにはどうすればよいですか?
解決
プリコンパイルされたヘッダーとは何ですか?
多くの場合、C ++ソースファイルには、外部ライブラリからのヘッダーが含まれます。 Windowsに含まれています windows.h
. 。これらのヘッダーファイルは非常に大きく、処理に時間がかかります。 C ++ファイルをコンパイルするたびに、コンパイラはこれらのヘッダーファイルから何千もの行を読み取り、処理する必要があります。ただし、外部ライブラリは変更されず、これらのファイルを1回だけ処理して結果を保存すると、時間を節約できます。
プリコンパイルされたヘッダーは、単にコンパイラが何度も何度も使用できる中間フォームに処理されたヘッダーファイルの束です。
Visual C ++のプレリ縮小ヘッダー
Visual C ++では、慣習的です #include
変更していないヘッダーファイルすべて stdafx.h
. 。次に、コンパイラにプリコンパイルされたヘッダーを作成するように指示します stdafx.pch
コンパイル中 stdafx.cpp
含まれているだけです stdafx.h
. 。他の他のヘッダーを使用したい場合 .cpp
含める必要があります stdafx.h
最初にファイルを含めると、コンパイラに使用するよう指示する stdafx.pch
プリコンパイルされたヘッダー用。
含まないことについてエラーが発生した場合 stdafx.h
その特定のソースファイルに事前コンパイルされたヘッダーを使用しないようにコンパイラに指示する必要があります。 (または含めることができます stdafx.h
.)
個々のソースファイルのヘッダー設定を事前拡張します
Visual C ++を使用すると、プロジェクト全体と個々のファイルのコンパイラ設定を制御できます。個々のプロパティにアクセスするには、ソリューションエクスプローラーでソースファイルを選択します。右クリックして選択します プロパティ コンテキストメニューから。プリコンパイルされたヘッダーのオプションはで見つかります 構成プロパティ => C/C ++ => プリコンパイルされたヘッダー. 。これらの設定を変更すると、すべての構成に対してそれを行うことがよくあります(例: デバッグ と リリース).
事前コンパイルされたヘッダーを使用している場合、コンパイラに使用するように指示するプロジェクト全体の設定があります stdafx.pch
プリコンパイルされたヘッダー用。 stdafx.cpp
コンパイラに生成するように指示する個別の設定があります stdafx.pch
, 、そして、あなたが含まないいくつかのソースファイルを持っている場合 stdafx.h
これらの個々の設定を設定して、プリコンパイルされたヘッダーを使用しないようにすることができます。
他のヒント
コードをコンパイルするとき、コンパイラはすべての#includedヘッダーを調べて、.cppファイルにコードをコンパイルする方法を知る必要があります。
大規模なプロジェクト(またはMFCのようなライブラリを使用するもの)では、これらのヘッダーが大きくなる可能性があるため、コンパイルに時間がかかります。
これらのヘッダーのほとんどはそれほど頻繁に変更されないため、コンパイラを「プレリコンパイル」にすることができます - それらを処理し、その状態を事前コンパイルされたヘッダーに保存できます。次にコンパイルするときは、これらすべてのヘッダーを再度読み取ってコンパイルする必要はないため、はるかに高速です。
Visual Studioの要件の1つは、プレリ縮小ヘッダーを使用する場合、プロジェクト内のすべてのファイルに含める必要があることです。
プロジェクトが小さい場合、または頻繁に構築されていない場合は、「Precompilled Header」オプションを無効にするだけです(プロジェクト設定で。これはに適用されます。 全体 事業)。あなたが得る唯一の効果は、それがよりゆっくりとコンパイルするかもしれないということです。または、オプションを有効にしたままにして、すべてのファイルに最初に含めるように#include "stdafx.h"を追加します。
- 見る MSDN
- いつもの。すべてのCPPファイルに「stdafx.h」を含める必要があります。全体のポイントは、それらが事前にコンパイルされていることであり、それらのすべてがコンクリートファイルで使用されているわけではないことを心配する必要はありません。