2012-09-21 119 views
3

我繼承了一些代碼,做了這樣的事情,在VS2010中定義的C++預編譯頭。編譯器無法找到

頁眉: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 

我明白了什麼一個預編譯的頭文件用於和代碼在這裏做什麼(有點)。當我將這些文件複製到我的項目中時,這是我可以更新棄用的代碼,但不會影響原始項目,VS2010在(1)行上發生堵塞。 VS2010說它無法找到該文件。

我已經走過了兩個項目,我找不到任何設置上的差異。

我錯過了什麼,爲什麼可以將PCH的標題嵌入這樣的標題中,而不是將它們移動到名爲HeaderFile_pch.h的文件中。這是一種宏觀黑客?

+0

.pch是* binary *文件。這聽起來像你的失蹤(或腐敗)。你不能只刪除(如果存在)並自己重建.pch文件嗎? http://msdn.microsoft.com/en-us/library/xe090yxk%28v=vs.80%29.aspx – paulsm4

+0

嗯,這感覺就像我錯過了自動英特爾警告文件,但我不知道爲什麼。看起來他在頭文件中定義了缺少的「文件」,並且可以引用它,但我不知道如何。 – Dan

回答

5

對於初學者來說,在上面提供的示例中,不會出現像Headerfile_pch.h這樣的文件,也可能不在您本地的fs中。

Visual C++允許您定義幾種設置預編譯頭文件的方法。最常見的是在項目配置級別爲所有源文件啓用它,在Configuration Properties/C++/Precompiled Headers下,設置「Precompiled Header」,選擇「Use」。設置「預編譯頭文件」的相同位置通常是「stdafx.h」,但可以是您選擇的任何內容。所有文件將獲得此設置(因此項目級別的配置)除了....

一個文件負責生成PCH文件。該文件通常是項目中的stdafx.cpp文件,但同樣,它可以是任何您希望的單一來源。大多數只是設置一個虛擬CPP文件,其中有一件事:#include「myheader.h」(DUH)..配置預編譯頭爲這一個文件,從「使用」切換到「創建」。這確保瞭如果用於PCH的主頭不同步,那麼首先重新編譯源文件以在其他人被啓動之前重新生成PCH數據文件。

這是絕對必需的一個屬性:包括頭部(myheader.h或任何你要調用它)必須第一包括你在編譯任何源文件正在參與使用PCH包括(很顯然)包含你指定爲「生成器」的文件(前一段中標記爲「創建」的文件)。

最後,你可以如果這是由於您的構建環境中的異常情況(即做愚蠢的事情的第三方頭),這是一個問題,逐個文件禁用pch。

在Visual Studio中還有其他配置PCH設置的方法,但這是最常見的