5

私がやっていることは、プリコンパイル済みヘッダーが設定されているかどうかは関係ありませんプロジェクトを設定することです。 stdafx.hppは私のP.Hです。プリコンパイル済みヘッダーの有無にかかわらずコンパイルするプロジェクトを設定する

私の主な問題は、プロジェクトのルートディレクトリだけでなく、serveralディレクトリにもファイルがあることです。私は何をしようと試みています

  1. をI

    #include "stdafx.hpp" 
    

    はどこにでも上のPHセットで正常に動作しますが、私はそれを無効にした場合、サブディレクトリ内のファイルはそれを見つけるcoudn'tので、それは、文句を言う希望の場合。

  2. Iサブディレクトリにあるファイルで

    #include "../stdafx.hpp" 
    

    場合、それはPHせずに正常に動作しますが、PHと、コンパイラはおよそstdafx.hpp含まれていないと文句を言います。

  3. 強制的なインクルードファイルをstdafx.hppに設定した場合、相対パスまたは絶対パスのどちらかでコンパイラにエラーが表示されました(必要ならば、私はそれを再現します)。

解決策は何ですか?

答えて

6

標準的な解決策は簡単です。プリコンパイル済みヘッダーファイル(デフォルトでstdafx.h)を含めないでください。

このオプションは、指定されたすべてのソースファイルの最初の行に#includeディレクティブで二重引用符を使用してファイルを指定するのと同じ効果があります:あなたのコードは、プリコンパイル済みヘッダーを使用してコンパイルする必要がある場合、/FI (Name Forced Include File)コンパイラスイッチを使用しますコマンド行、CL環境変数、またはコマンド・ファイルで指定します。

これにより、ソースコードを変更せずに、プリコンパイル済みヘッダーファイルを使用することができます。

二重引用符での#includeディレクティブを使用するためのルールが#include Directive (C/C++)の下に概説されています

引用形式:この順序でファイルを含めるための

プリプロセッサを検索:

  1. #include文を含むファイルと同じディレクトリにあります。
  2. 現在開かれているインクルードファイルのディレクトリを、そのファイルが開かれていた逆の順序で表示します。検索は親インクルードファイルのディレクトリから開始され、祖父母インクルードファイルのディレクトリを通って上向きに進みます。
  3. 各/ Iコンパイラー・オプションで指定されたパスに沿っています。
  4. INCLUDE環境変数で指定されたパスに沿っています。

プリコンパイル済みヘッダーを生成するために使用されるヘッダファイルのディレクトリを含めるように/I (Additional Include Directories)コンパイラスイッチを使用すると、単に設定/プロジェクトトポロジのない組み合わせではありませんあなたは

/FIstdafx.hpp 

を書き込むことができるようになりますプリコンパイルされたヘッダーを単にオンまたはオフに切り替えることができます。 /Y、/ FI、および/ Iコンパイラスイッチは一緒に使用するか、完全に削除する必要があります。構成のセットを1つの単位として変更するには、プロパティページを使用します(詳細は、Working with Project Propertiesを参照してください)。

1

プロジェクトのインクルードパスを設定して、ファイルのディレクトリに関係なく、常に#include "stdafx.hpp"がヘッダーを見つけるようにするのが簡単な解決策です。

他のディレクトリのヘッダーファイルを意図せずに表示することが心配な場合は、あらかじめコンパイルされたヘッダーを独自の特別なディレクトリに配置することもできます。

関連する問題