2012-07-06 45 views
1

我剛剛在Xcode 4.3.3上創建了一個新的可可項目。 Apple LLVM編譯器3.1設置的預處理器宏具有分配的DEBUG = 1 $(繼承)值。我刪除,並重新添加它,現在我就在編譯時錯誤:LLVM Compiler on macros的新建設置

clang: error: no such file or directory: 'DEBUG=1'

我搜索的項目設置的值,我看到該值在「其他警告標誌」也被定義

我的問題是:

  1. 是什麼只是有DEBUG VS DEBUG=1之間的區別?
  2. $(inherited)是做什麼用的?
  3. 它還在做其他警告標誌嗎?
+1

選擇標籤時請小心。您無意中通過拼寫錯誤創建了兩個新標籤。 – Charles 2012-07-06 23:31:56

+0

對不起,我以爲我是從自動完成列表中選擇它們。 – 2012-07-07 00:44:06

+0

嚴格地說,'DEBUG = 1'不是標準的(儘管我將它定義爲調試版本)。對於發佈版本,重要的是'NDEBUG = 1'。它需要由Posix來擺脫斷言(其中調用abort())。斷言是通常被濫用的調試診斷。當使用Cocoa/CocoaTouch時,您也需要爲發佈版本定義'NS_BLOCK_ASSERTIONS = 1'。 – jww 2012-11-12 06:31:26

回答

1

首先,如果您收到編譯錯誤,那麼您很可能會將宏返回到項目設置中的錯誤位置。請確保您已將其放入Apple LLVM compiler x.x - Preprocessing部分下的Preprocessor Macros項目的Debug配置分支中。

對於您的其他問題:

  1. 第一個版本僅僅定義宏DEBUG所以它基本上是空的。您可以測試它是否存在,但不是很多。第二個將它設置爲1,以便預處理器實際上可以執行比較,如#if DEBUG && SHOULD_DIE_ON_ERROR,如果應用程序遇到一些驗證錯誤,但只有在設置了SHOULD_DIE_ON_ERROR且您正在調試模式下運行時纔可以中止比較。
  2. $(inherited)只是引入其他從鏈中繼承的宏。因此,如果您的項目定義了一些項目並且您的目標定義了更多項目,那麼目標也可以獲取項目的設置,而無需重新定義它們。
  3. 它不應該影響警告標誌。如果有的話,它確定你包含的頭文件(比如cocoa框架)中的代碼路徑,它可能使用不同的實現來實現,或者可能會向數據結構或其他任何地方添加調試信息。