启用静态库中使用的ifdef宏

时间:2011-07-20 07:05:29

标签: ios objective-c macros conditional-compilation

您可以使用静态库中定义的宏吗?

我有一个名为TWDEBUG的调试宏,我在一个我创建用于共享的静态库中使用它。 如果我将静态库导入到我的新项目并使用它,编译器似乎无法识别它。我确实将预处理器宏设置为TWDEBUGOther C flags以及Other C++ flags设置为-TWDEBUG,但是当我运行代码时,ifdef宏不会被执行。

1 个答案:

答案 0 :(得分:7)

宏在编译时进行评估。因此,在构建静态库时,它们的值将被冻结。对于调试语句,这通常意味着它们被省略而不是构建库的一部分。

如果稍后将静态库添加到项目中,则可以更改宏的值。但它不会对静态库产生任何影响,因为它不再编译。缺少调试语句。

<强>更新

因此,要实现调试选项,我会看到两个选项:

  1. 使用全局变量和正确的ifs来打开和关闭调试,而不是使用宏和ifdef。其他开发人员可以使用API​​(全局函数)来设置调试级别,以便隐藏全局变量。

  2. 从相同的源代码创建两个静态库,一个启用调试以用于开发目的,另一个禁用调试以供生产使用。如果XCode可以在两个库之间自动切换,则此选项可能是可行的。目前,我不知道你将如何配置它。