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

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

最佳答案

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

如果以后将静态库添加到项目中,则可以更改宏的值。但这对静态库没有任何影响,因为它不再编译。调试语句丢失。

更新:

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

  • 使用全局变量和适当的ifs代替宏和ifdefs来打开和关闭调试。其他开发人员可以使用API​​(全局函数)来设置调试级别,以便隐藏全局变量。
  • 从同一源代码创建两个静态库,一个静态库已启用调试用于开发目的,另一个静态库已禁用调试用于生产用途。仅当XCode可以在两个库之间自动切换时,此选项才可行。目前,我不知道您将如何配置它。
  • 关于ios - 启用静态库中使用的ifdef宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6758187/

    10-11 23:15
    查看更多