2012-12-18 99 views
0

這個問題讓我發狂,它幾乎肯定涉及到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文件中,但似乎沒有任何幫助。任何人都知道這裏發生了什麼?

+0

附加信息:問題似乎是Xcode對文件屬於哪個目標感到困惑,如果該文件是多個子項目的一部分。儘管我將X設置爲當前構建目標,但jit編譯器將其編譯爲如果項目B具有目標Y設置。 – DaGaMs

+0

事實上,問題似乎是項目A和B之間存在構建依賴關係,因此B會在A之前編譯,因此兩個項目中出現的文件都先編譯爲B,然後再也不會再接觸。 – DaGaMs

回答

0

花了大部分時間在這個煩人的問題後,我發現了一個「解決方案」的種類:使用Xcode工作區,而不是子項目的獨立可執行文件,都屬於同一個應用程序包。我現在在當前方案的「構建」部分(產品編輯方案...)中添加其他目標,而不是創建構建依賴關係。