プリコンパイル済みヘッダーの目的と理由を理解しています。しかし、それらを実装する際のルールは何ですか?私の理解から、それはこのようなものになります:
これは正しいですか?プリコンパイル済みヘッダーに含まれているファイルにそれを含めないでください。現在、これを直感的に使用すると、次のコンパイルエラーが発生します。
エラーC2857:/Ycstdafx.hコマンドラインオプションで指定された '#include'ステートメントがソースファイルに見つかりませんでした
コマンドラインオプションは次のとおりです。
/ Od/I "../External/PlatformSDK/Include"/I ".."/I "../External/atlmfc/Include"/D "_DEBUG"/D "_UNICODE"/D "UNICODE"/Gm/EHsc/RTC1/MDd /Yc"stdafx.h "/Fp"....\Output\LudoCore\Debug\LudoCore.pch"/Fo "....\Output\LudoCore\Debug \"/Fd ".. ..\Output\LudoCore\Debug\vc80.pdb "/ W4/WX/nologo/c/ZI/TP/wd4201/errorReport:Prompt
Stdafx.cppはstdafx.hをインクルードし、/Yc"stdafx.h"
を使用してビルドする必要があります。
他の* .cppはstdafx.hをインクルードし、/Yu"stdafx.h"
を使用してビルドする必要があります。
コンパイラオプションで使用されている二重引用符に注意してください。
これは、プリコンパイル済みヘッダーを作成するためのstdafx.cppのVisual Studio設定のスクリーンショットです。
以下は、対応するコマンドラインオプションです(これは読み取り専用ですが、他のページで指定された設定を反映しています。IDEは、コンパイラオプションでファイル名の前後に二重引用符を挿入します)。 :
これは私のstdafx.cppファイルの内容です。
// stdafx.cpp : source file that includes just the standard includes
// CallWinsock.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
Visual Studioは、プロジェクトだけでなくソースファイルごとに、コンパイル済みのヘッダープロパティを格納できます。
デフォルトでは、すべてのプロパティは「親またはプロジェクトのデフォルトから継承」に設定され、そのプロパティの親オブジェクトの値を表示しますが、子レベル(この場合は.cppファイル)でオーバーライドされると、ファイルは親プロパティからの変更を無視します。
必要な構成は次のとおりです。
「stdafx」は単なる慣例です。これは決して必須ではありません。マルチプロジェクトソリューションでは、さまざまなパーツに複数のプリコンパイル済みヘッダーを使用する他のセットアップを使用しました。例えば。 1つのPCHをUIプロジェクトで共有し、別のPCHをデータベースプロジェクトで共有すると便利な場合があります。
関連するコンポーネントは、プリコンパイル可能なヘッダーをリストするXhファイル、Xhのみを含む(そしてコード自体を追加しない)X.cppファイル、およびコンパイラオプション_/Yc
_。
Y.cppファイルを_/Yu"X.pch"
_でコンパイルすると、コンパイラはおよび破棄から_#include "X.h"
_までのすべてを読み取ります。その時点で、入力ストリームを除いて、内部状態をX.pchに格納されている状態に置き換えます(ファイルポインターが_#include "X.h"
_の次の行に設定されたまま、Y.cppのままです)。
きみの #include "stdafx.h"
は各cppファイルの最初の行である必要があります。 .hファイルでは使用しないでください。それ以外はあなたの言う通りです。