如何在设置标志时将代码包含到构建中?

时间:2011-06-13 17:49:09

标签: iphone objective-c ios ipad conditional-compilation

我在我的应用程序中添加了一些调试代码,我只想在需要时调用它。我记得有一些IFDEF可以用来有条件地将代码包含在源文件中。

例如,我可能会有这样的事情:

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

然后,如果kDebugEnabled为YES,那么这段代码只会编译成二进制文件。

我该怎么办?

请注意:我不想使用项目编译器标志设置。我只是想定义一个BOOL(或者同样有用的东西),这是真或假,然后只需在我的App Delegate中轻松设置它。我发现很难导航到项目编译器设置,搜索标志然后设置它。我知道有一个可能有用的Debug标志。

2 个答案:

答案 0 :(得分:5)

您正在寻找的是:

#ifdef __YOURSYMBOL__
  <conditional code>
#endif

您可以通过编程方式定义__YOURSYMBOL__,如下所示:

 #define __YOURSYMBOL__

__YOURSYMBOL__可以是任何有意义的字符串,以便您记住为什么要包含/排除该代码段。

DEBUG常量是一个特殊的预处理器常量,编译器在为调试构建代码时专门为您定义,因此您只需使用它:

#ifdef DEBUG
         <conditional code>
#endif

考虑到这是C预处理器,而不是C,也没有使用Objective-C,因此像kDebugEnabled == YES(其中kDebugEnabled是Objective-C变量)这样的测试是不可能的。您可以为常量定义整数值,如下所示:

#define __LOG_LEVEL__ 3

然后测试它:

#if __LOG_LEVEL__ == 3
    ...
Endif

答案 1 :(得分:3)

据我所知,如果不使用编译器标志,则不能在类中编译未编译到最终产品中的代码。但是,使用DEBUG标志比您想象的容易得多。如果您使用的是Xcode 4,默认情况下会为您设置。

#ifdef DEBUG

  // Your debug-only code goes here

#endif // DEBUG

默认情况下,Xcode有两种配置DebugRelease。当您使用调试版本配置时,它会设置DEBUG编译器标志,然后您可以使用它来有条件地编译代码。根本不需要弄乱编译设置。