c++ - stdafx.hの目的(そして、なぜこれが機能しないのですか?)

原文 c++ windows visual-studio-2010

ベンダー提供のAPIを使用するプロジェクトに取り組んでいます。プロジェクトでそのAPIを使用するクラスを作成し、ベンダーのヘッダーファイルをstdafx.hファイルに含めました。物事はコンパイルされません。

次に、#includeをクラスのヘッダーファイルに直接入れてコンパイルします(そして、はい、私のクラスにはstdafx.hが含まれているので、それは理由ではありません。

なぜ最初にコンパイルされないのかと推測する人はいますか?これはプロジェクトストッパーではありませんが、すべてのベンダーのAPIファイルを、それらが属するstdafx.hに保持できるとよいと思います。

編集:問題は解決しました。ヘッダーファイルを#ifndefするのを忘れて、間違った順序でそれらを含めることで、循環依存関係を作成しました。バカみたいな感じ。
答え
stdafx.hは、VSで生成されたプロジェクトで、プリコンパイルされるヘッダーの「コンテナー」として主に使用されます。

プロジェクトがおそらくプリコンパイル済みヘッダーを使用するように構成されているため、新しい#includestdafx.hに追加しても含まれませんでした。また、stdafx.hに何かを追加すると、プリコンパイル済みの.pchファイルを再生成する必要があります情報。

そのための1つの方法は、プロジェクトに.cppファイルを置き、#include "stdafx.h"以外の処理を行わないようにすることです。多分それを `precompile.cpp"と呼んでください。次に、その1つの.cppファイルのプロジェクト設定に移動し、次の設定を変更します(すべての構成に対して):

"C/C++ | Precompiled Headers | Precompiled Header" setting 


"Create /Yc"を選択します。

これによりビルドが設定され、precompile.cppをビルドする必要がある場合(インクルードされるstdafx.hヘッダーが変更されたため)、他のすべてが使用する.pchファイルが再ビルドされます。
関連記事

c++ - GCCでの構造体メンバーの配置

c++ - 名前空間でメッセージ定数をラップする

c# - C#アプリと既存のWebサイトの統合

c++ - WinCEアプリケーションのメモリ使用量

c++ - Cortex-M3経由でUSBウェブカメラにアクセスする

c++ - 整数部と浮動小数点部の両方の精度を設定することによるfloat <<操作

c++ - 基本クラスの非仮想関数で使用される仮想関数のオーバーロード

c++ - MSVCでECPGを使用する方法

c++ - グローバル名前空間でnew / deleteをオーバーライドする場合、std-rtlからのnew / deleteのデフォルト実装はどのように使用すればよいですか?

c++ - ベクトルc++から正方行列の行数と列数を取得する