Xcode xcconfig:用于调试/发布的不同预处理器宏
我创建并应用了一个简单的.xcconfig文件,其中包含Xcode xcconfig:用于调试/发布的不同预处理器宏,xcode,preprocessor,xcconfig,Xcode,Preprocessor,Xcconfig,我创建并应用了一个简单的.xcconfig文件,其中包含 GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = FOODEBUG GCC_PREPROCESSOR_DEFINITIONS[config=Release] = FOORELEASE #include <iostream> // This warning IS shown #if DEBUG #warning DEBUG is set to 1 #endif // This war
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = FOODEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = FOORELEASE
#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包含
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = FOODEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = FOORELEASE
#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;
}
#包括
//将显示此警告
#如果调试
#警告调试设置为1
#恩迪夫
//此警告未显示
#ifdef FOODEBUG
#警告:已设置调试
#恩迪夫
//此警告未显示
#ifdef发布
#已设置警告释放
#恩迪夫
int main(int argc,const char*argv[]
{
//在这里插入代码。。。
std::cout如果你有一个预处理器宏,你需要给它一个值才能像你一样使用它,请参见我的一个项目设置的屏幕截图作为示例:
可以访问DEBUG的原因在于#if
和#ifdef
之间的行为不同。
当宏存在时,#if
将为真,#ifdef
如果它有一个非零值。我建议始终将值指定为要保存的值,因为我不确定上述情况是否适用于所有编译器版本
更新:
以前不知道,但似乎config=Debug
不起作用。虽然宏在设置中可见,但它们不会向上继承。
工作原理是2个类似于以下内容的xcconfig文件:
Release.xconfig:
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FOORELEASE=1
Debug.xconfig
#include "Release.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FOODEBUG=1
请参见James Moores在此处的回答:这是如何回答问题的?很抱歉,不清楚,请参见我编辑的答案。我不是说更改宏,而是指定一个非零值。希望这有所帮助,直到我不明白这与我的问题有什么关系。区别对我来说非常清楚,但没有一个宏是定义的在这里,有值与否应该无关紧要。也许我没有正确理解您的意思……如果您有值,请尝试在“设置”窗口中进行设置。如果出于某种原因需要在xcconfig文件中进行设置,请尝试:GCC_预处理器_DEFINITIONS[config=Debug]=“FOODEBUG=1”(不确定引号)看起来,使用单个配置文件无法实现这一点,调试和发布需要单独的文件