2010-10-17 37 views
2

我剛剛使用Xcode創建了一個「C++標準動態」庫項目,並使用LLVM 2.0進行編譯。我注意到PCH文件包含行#include <iostream>,但文件Test.cp還包含該#include <iostream>語句。Xcode PCH問題 - PCH中不包含在源文件中的項目

奇怪的是,在取出聲明Test.cp,構建與錯誤Semantic Issue – Use of undeclared identifier 'std'失敗,儘管該聲明也包含在PCH。

爲什麼PCH不工作?有沒有我錯過的設置?我從來沒有和他們做過任何事情(因爲他們總是工作),所以我不確定是什麼原因導致它不能工作,即使是一個全新的項目。

+1

XCode 4仍在NDA下,不是?你應該訪問蘋果開發者論壇。 – Eiko 2010-10-17 06:48:28

回答

-1

預編譯頭文件用於加快編譯速度。它們沒有任何其他效果,特別是您仍然需要在需要它們的地方包含標題。

編輯 -在Xcode中,pch文件實際上是預編譯的前綴頭文件(使用默認項目配置)。檢查GCC_PRECOMPILE_PREFIX_HEADERGCC_PREFIX_HEADER構建設置。

+0

嗯...這不是我見過的。特別是,爲一個全新的Cocoa項目生成的PCH文件是這樣的:'#ifdef __OBJC__ #import #endif'。如果我從每個頭文件中刪除單獨的'#import ',儘管.pch文件是包含Cocoa的唯一地方,它仍然可以工作。這種行爲是否可能(PCH作爲一種「全球標題」)對於Cocoa項目來說是獨一無二的?來自[Wikipedia條目](http://en.wikipedia.org/wiki/Precompiled_header)的 – 2010-10-17 12:38:35

+0

:「一個相關的特徵是前綴頭文件,它是編譯器自動包含的文件,不需要使用任何編譯器指令前綴頭文件通常是預編譯的,但並非所有的預編譯頭文件都是前綴頭文件。「不知道爲什麼XCode將預編譯頭作爲前綴頭。 – Aleph7 2010-10-17 19:47:20

+0

呃......這很奇怪。我曾經使用過.pch文件作爲前綴頭文件,並且它可以工作,但是現在我無法弄清楚我是如何做到的......很久以前。除非它曾經是默認的。總之,謝謝你的幫助。我最終只是在每個文件的開始部分放置這些語句;這並不是什麼大事。 – 2010-10-21 19:40:34

1

刪除導出的數據(窗口管理器,項目選項卡,選擇您的項目)讓XCode重建PCH的索引。 此外,如果您使用單元測試,則UnitTests目標有單獨的PCH。確保這還包括所需的進口。