[英]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.