C++ Apple LLVM 6.0预处理器(如定义)()
我目前正在做一个有很多依赖关系的项目。它是用C++库编写在Objtovi-C中的。它使用跨平台代码,对库中的不同平台进行条件编译 在最新的更新之后,我遇到了一个关于预处理器宏的特殊问题C++ Apple LLVM 6.0预处理器(如定义)(),c++,xcode,xcode6,clang,c-preprocessor,C++,Xcode,Xcode6,Clang,C Preprocessor,我目前正在做一个有很多依赖关系的项目。它是用C++库编写在Objtovi-C中的。它使用跨平台代码,对库中的不同平台进行条件编译 在最新的更新之后,我遇到了一个关于预处理器宏的特殊问题 #if defined(DEBUG) #warning WARNING_1 #elif defined(DEBUG_gibberish) #warning WARNING_2 #elif defined(SOMETHING) #warning WARNING_3 #else #warning WARNING_DE
#if defined(DEBUG)
#warning WARNING_1
#elif defined(DEBUG_gibberish)
#warning WARNING_2
#elif defined(SOMETHING)
#warning WARNING_3
#else
#warning WARNING_DEFAULT
#endif
代码
在这种情况下,DEBUG
宏在Xcode Apple LLVM 6.0预处理部分中定义
请看图片
所以基本上,问题在于#if defined()对于这个特定的项目并没有像预期的那样工作。如果我将相同的代码复制到某个干净的测试项目中,它将按预期工作
它还有另一个有趣的效果,如果我定义DEBUG\u gibberish
,那么它将被评估,而不是其他情况。在进行了两次实验之后,它似乎总是评估/使用第一个真实条件,然后评估/使用第二个真实条件,或者如果没有第二个真实条件,则评估/使用第二个真实条件
我已经尝试过清理项目、清理派生数据、重新启动Xcode、重新启动mac甚至巫毒娃娃
如果您能想到为什么会发生这种情况以及如何解决,我将不胜感激
EDIT1:我的主项目中有一个Xcode项目的层次结构。有问题的库是我的主项目中的一个子项目。如果我尝试单独构建它,它会很好地工作。如果我从主项目将其编译为依赖项,我会遇到这个问题。好的,我发现了问题 在我的项目中,我使用来自第三方库的一些头来创建我自己的库类的子类
警告\u 1
定义了DEBUG
宏的库
然后在预处理相同的标题后,它显示警告\u默认值
在我的项目中,未定义DEBUG
宏
但这两个警告都显示在同一个文件中所以最终的解决方案很简单,我必须在我的项目中定义所需的宏,然后进行良好的编译。了解如何获得某个文件的预处理形式。试试
clang-C-esomefile.cc>somefile.ii
(或者g++-C-esomefile.cc>somefile.ii
)。阅读维基网页