這個問題讓我發狂,它幾乎肯定涉及到Xcode中的一些錯誤,但也許有一些解決方法,我不熟悉或我可能忽略了一些。這裏是:Xcode JIT編譯器忽略一些預處理器宏
我們有不同的子項目的幾個構建目標,這些子項目生成部分重疊代碼的單獨可執行文件。爲了排除應該不在一個或另一個應用中的代碼的某些位,我們在每個子項目的相應.pch文件中定義了若干個#define
宏,例如,在主app.pch
#ifndef MY_APP
#define MY_APP 1
#endif
和子app.pch
#ifndef SUB_APP
#define SUB_APP 1
#endif
然後,在一些代碼,你會看到
- (void)doSomething
{
#ifdef MY_APP
NSLog(@"This is just an example");
#endif
}
現在,問題在於Xcode有時候,也就是隻有在的某些機器上,不會做語法高亮或代碼完成有條件編譯的代碼的離子。也就是說,對於我的同事來說,它工作得很好,而我從來沒有看到語法高亮,不管我做什麼。爲了記錄,我們都在Xcode 4.5.2上。我嘗試刪除派生數據和重新索引,洗牌目標/模式的順序,並將預處理器宏放入項目和目標設置而不是.pch文件中,但似乎沒有任何幫助。任何人都知道這裏發生了什麼?
附加信息:問題似乎是Xcode對文件屬於哪個目標感到困惑,如果該文件是多個子項目的一部分。儘管我將X設置爲當前構建目標,但jit編譯器將其編譯爲如果項目B具有目標Y設置。 – DaGaMs
事實上,問題似乎是項目A和B之間存在構建依賴關係,因此B會在A之前編譯,因此兩個項目中出現的文件都先編譯爲B,然後再也不會再接觸。 – DaGaMs