3

私はこのようなことをしたいくつかのコードを継承しました。

ヘッダー: HeaderFile.h

#ifndef HEADERFILE_H
#define HEADERFILE_H

#ifndef HEADERFILE_PCH_H
#include<LibStuff>
#include<LibStuff2>
#include<LibStuff3>
#include<LibStuff4>
#include<LibStuff5>
#endif

#include "FilesInProject"

Class A
{
  //Code

};

#endif

Cpp: HeaderFile.cpp

#include "HeaderFile_pch.h" //(1)

#include "HeaderFile.h"

//More code

プリコンパイル済みヘッダーの目的と、ここでコードが何をしているのか (一種) を理解しています。これらのファイルを自分のプロジェクトにコピーすると、非推奨のコードを更新できますが、元のプロジェクトには影響しません(1)。VS2010 そのファイルが見つからないと言っています。

私は 2 つのプロジェクト間を移動しましたが、設定の違いは見つかりません。

何が欠けているのでしょうか。PCH実際にHeaderFile_pch.h. これはある種のマクロハックですか?

4

1 に答える 1

6

まず、上記で提供したサンプルにも、おそらくローカル fs にも、Headerfile_pch.h のようなファイルはありません。

Visual C++ では、プリコンパイル済みヘッダー ファイルを設定するいくつかの方法を定義できます。最も一般的なのは、プロジェクト構成レベルですべてのソース ファイルに対して有効にすることです。構成プロパティ/C++/プリコンパイル済みヘッダーの下で、[プリコンパイル済みヘッダー] を設定し、[使用] を選択します。「プリコンパイル済みヘッダー ファイル」を設定する同じ場所は、通常は「stdafx.h」ですが、任意の場所を選択できます。すべてのファイルがこの設定を取得します (したがって、プロジェクト レベルでの構成) 例外....

1 つのファイルが PCH ファイルの生成を担当します。そのファイルは通常、プロジェクトの stdafx.cpp ファイルですが、希望する任意の単一ソースにすることもできます。ほとんどの場合、#include "myheader.h" (duh).. その 1 つのファイルのプリコンパイル済みヘッダーを構成し、"Use" から "Create" に切り替えます。これにより、PCH のプライム ヘッダーが同期しなくなった場合、そのソース ファイルが最初に再コンパイルされて、他のファイルが開始される前に PCH データ ファイルが再生成されます。

これの 1 つの属性は絶対に必須です: そのインクルード ヘッダー (myheader.h またはそれを呼び出しているもの) は、(できれば明らかに) を含む pch の使用に参加しているコンパイル中のソース ファイルの最初のインクルードでなければなりません。 「ジェネレーター」として指定したファイル (前の段落で「作成」とマークされたファイル)。

最後に、ビルド環境の異常な条件 (つまり、愚かなことをするサードパーティのヘッダー) が原因で問題が発生する場合は、ファイルごとに pch を無効にすることができます。

Visual Studio で PCH 設定を構成する方法は他にもありますが、これが最も一般的です。

于 2012-09-21T17:45:56.187 に答える