Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode xcconfig:用于调试/发布的不同预处理器宏_Xcode_Preprocessor_Xcconfig - Fatal编程技术网

Xcode 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

我创建并应用了一个简单的.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 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”(不确定引号)看起来,使用单个配置文件无法实现这一点,调试和发布需要单独的文件