簡體   English   中英

僅在設置標志時如何將代碼包含到構建中?

[英]How to include code into the build only when a flag is set?

我在我的應用程序中添加了一些調試代碼,我只想在需要時調用它們。 我記得有某種IFDEF可用於有條件地將代碼包含到源文件中。

例如,我可能有這樣的事情:

IFDEF kDebugEnabled == YES {
    // some debugging code here
}

然后這段代碼只有在 kDebugEnabled 為 YES 時才會編譯成二進制文件。

我怎么能做這樣的事情?

請注意:我不想使用項目編譯器標志設置。 我只想定義一個 BOOL(或同樣服務於目的的東西),它是真還是假,然后在我的 App Delegate 中輕松設置它。 我發現很難導航到項目編譯器設置、搜索標志然后設置它。 我知道有一個可能有用的調試標志。

您正在尋找的是:

#ifdef __YOURSYMBOL__
  <conditional code>
#endif

您可以像這樣以編程方式定義__YOURSYMBOL__

 #define __YOURSYMBOL__

__YOURSYMBOL__可以是任何對您有意義的字符串,以記住您為什么包含/排除該代碼片段。

DEBUG常量是編譯器在為調試而構建代碼時專門為您定義的特殊預處理器常量,因此您可以簡單地使用它:

#ifdef DEBUG
         <conditional code>
#endif

考慮到這是您正在使用的 C 預處理器,而不是 C,也不是 Objective-C,因此無法進行類似kDebugEnabled == YES的測試(其中 kDebugEnabled 是 ZA5084C5B36F3209E58B2629B 變量)。 您可以為常量定義 integer 值,如下所示:

#define __LOG_LEVEL__ 3

然后對其進行測試:

#if __LOG_LEVEL__ == 3
    ...
Endif

據我所知,如果不使用編譯器標志,您的類中不能有未編譯到最終產品中的代碼。 但是,使用 DEBUG 標志比您想象的要容易得多。 如果您使用的是 Xcode 4,則默認為您設置。

#ifdef DEBUG

  // Your debug-only code goes here

#endif // DEBUG

Xcode 默認有兩種配置, DebugRelease 當您使用調試構建配置時,它會設置 DEBUG 編譯器標志,然后您可以使用它來有條件地編譯代碼。 根本不需要弄亂編譯設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM