gpt4 book ai didi

xcode - xcconfig:用于调试/发布的不同预处理器宏

转载 作者:行者123 更新时间:2023-12-04 20:08:41 28 4
gpt4 key购买 nike

我创建并应用了一个简单的 .xcconfig 文件,其中包含

GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = FOODEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = FOORELEASE

和 main.cpp 包含
#include <iostream>

// This warning IS shown
#if DEBUG
#warning DEBUG is set to 1
#endif

// This warning IS NOT shown
#ifdef FOODEBUG
#warning FOODEBUG is set
#endif

// This warning IS NOT shown
#ifdef FOORELEASE
#warning FOORELEASE is set
#endif

int main(int argc, const char * argv[])
{
// insert code here...
std::cout << "Hello, World!\n";
return 0;
}

现在我想知道为什么在 main.cpp 中,既没有定义 FOODEBUG 也没有定义 FOORELEASE ??!

正如预期的那样,build设置显示了我的 .xcconfig 文件的两行(“Any Architecture | Any SDK”),但实际上并未使用它们。

Xcode screenshot

我怎么能做到这一点?

最佳答案

如果你有一个预处理器宏,你需要给它一个值才能像你一样使用它,请看我的一个项目设置的屏幕截图作为示例:

enter image description here

您可以访问 DEBUG 的原因是#if 之间的行为不同。和 #ifdef .#if当宏存在时为真,#ifdef如果它有一个非零值。我建议始终分配要保存的值 1,因为我不确定以上是否适用于所有编译器版本。

更新:
以前不知道,但好像config=Debug不起作用。尽管宏在设置中可见,但它们不会继承。
有效的是 2 个与此类似的 xcconfig 文件:

发布.xcconfig:

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FOORELEASE=1

调试.xcconfig
#include "Release.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FOODEBUG=1

另请参阅 James Moores 的回答: How to append values in xcconfig variables?

关于xcode - xcconfig:用于调试/发布的不同预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21727717/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com