2017-03-02 132 views
8

我在項目目標的Build SettingsPreprocessor Macros部分中添加了TEST=1,並且每當我在代碼中使用它時,預處理器都認爲它沒有被定義。Xcode中的預處理器忽略目標預處理器宏

  1. ALT +點擊它顯示了一個問號
  2. 語法着色不工作以及
  3. 語法自動完成工作不正常

例如,具有:

#if TEST 

// a 

#else 

// b 

#endif 

有這種行爲:

  1. 語法着色只適用於// b
  2. 語法自動完成僅適用於// b

這是因爲預處理器不能找到TEST(即使它定義爲1,正如我前面提到),所以它將其視爲false

有什麼辦法可以解決這些問題嗎?

編輯:

我的使用情況與多個項目目標。因此,假設初始目標名爲First,其中TEST預處理器宏定義爲值1

如果我創建一個沒有定義預處理宏命名爲Second另一個項目的目標和要添加一些代碼,它只有在TEST是(沒有定義false /)0,我把它放在#else塊(// b)。

知道了語法着色和自動完成工程// b,它看起來像它工作正常,但由於選擇Second如果我改變當前目標的First一個(雙關語意),甚至構建它,它仍然有效。

+0

如果您構建項目,預處理器將檢測編譯時間標誌並顯示着色和自動完成。你嘗試過嗎? – manishg

+0

當然我建立了這個項目。 –

+0

您是否爲調試和發佈做了這件事?它在我的最後。 – manishg

回答

1

只需轉到目標 - >編輯方案 - >運行 - >信息並檢查生成配置。現在,在構建設置中添加預處理器宏時,請確保您正在爲正確的構建配置和正確的目標添加宏。

≈

我試圖通過增加對兩種調試和發佈如上建立我的目標應用程序(測試的ObjectiveC)。所以當我用下面的代碼嘗試下面的代碼時,你可以看到相應的語法顏色。

enter image description here

+0

當你點擊它時會發生什麼? –

+0

@lulian不確定你想用cmd +單擊來檢查。 –

+0

我只是想知道是否知道打開'Build Settings',或者它是否顯示問號,如我的例子。我的大項目可能會有其他設置干擾此項目。我會嘗試自己在一個新項目中進行測試,並嘗試查找問題是否是由我的一個設置引起的。 –

1

如果你想要做這樣的斯威夫特,你應該在你的Build Settings添加一個名爲OTHER_SWIFT_FLAGS一個User-Defined設置是這樣的:

OTHER_SWIFT_FLAGS user-defined setting

然後在你的代碼中鍵入:

#if TEST1 

// Debug 

#endif 

#if TEST2 

// Release 

#endif 

我不知道你爲什麼需要這個,但它可以對於本機Xcode Target的研究很有趣,可以爲具有相同根項目的多個應用程序使用特定的行爲。如果這是你想要的,你應該看看這篇文章:AppCoda using Targets with XCode