簡體   English   中英

標頭VS2010中定義的c ++預編譯頭。編譯器找不到

[英]c++ precompiled header defined in a header VS2010. Compiler can't find

我繼承了一些做過這樣的代碼,

標題: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的文件中。 這是某種宏觀黑客行為嗎?

對於初學者,在您上面提供的示例中也沒有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的prime-header不同步,則首先重新編譯源文件以在其他文件被啟動之前重新生成PCH數據文件。

這個屬性絕對是強制性的:包括頭文件(myheader.h或者你調用的任何內容)必須是你正在編譯的任何源文件中的第一個包含參與使用pch的文件,包括(希望很明顯)您指定為“生成器”的文件(前一段中標記為“創建”的文件)。

最后,如果由於構建環境中的異常情況(即第三方標題執行愚蠢的事情)而出現問題,您可以逐個文件地禁用pch。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM