您可以使用静态库中定义的宏吗?
我有一个名为TWDEBUG
的调试宏,我在一个我创建用于共享的静态库中使用它。
如果我将静态库导入到我的新项目并使用它,编译器似乎无法识别它。我确实将预处理器宏设置为TWDEBUG
和Other C flags
以及Other C++ flags
设置为-TWDEBUG
,但是当我运行代码时,ifdef
宏不会被执行。
答案 0 :(得分:7)
宏在编译时进行评估。因此,在构建静态库时,它们的值将被冻结。对于调试语句,这通常意味着它们被省略而不是构建库的一部分。
如果稍后将静态库添加到项目中,则可以更改宏的值。但它不会对静态库产生任何影响,因为它不再编译。缺少调试语句。
<强>更新强>
因此,要实现调试选项,我会看到两个选项:
使用全局变量和正确的ifs来打开和关闭调试,而不是使用宏和ifdef。其他开发人员可以使用API(全局函数)来设置调试级别,以便隐藏全局变量。
从相同的源代码创建两个静态库,一个启用调试以用于开发目的,另一个禁用调试以供生产使用。如果XCode可以在两个库之间自动切换,则此选项可能是可行的。目前,我不知道你将如何配置它。