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
Ios 通过Xcode方案添加预处理器定义_Ios_Xcode_Gcc - Fatal编程技术网

Ios 通过Xcode方案添加预处理器定义

Ios 通过Xcode方案添加预处理器定义,ios,xcode,gcc,Ios,Xcode,Gcc,目前,我需要构建一些iPhone应用程序的特殊“风格”。理想情况下,我希望每个“味道”都有一个方案,每个方案将定义(或设置)一个或多个预处理器定义,我可以使用这些定义在代码中进行分支,甚至可以预处理我的info.plist文件。显然,这可以通过多个目标来实现,但由于我可以拥有许多不同的应用程序“风格”,因此最好通过计划来实现,以保持目标的倒计时。我目前的想法是在预操作脚本期间添加这些预处理器定义,但我一生都找不到任何方法来更新GCC_预处理器_定义。既然它是一个环境变量,我不应该有权附加到GCC

目前,我需要构建一些iPhone应用程序的特殊“风格”。理想情况下,我希望每个“味道”都有一个方案,每个方案将定义(或设置)一个或多个预处理器定义,我可以使用这些定义在代码中进行分支,甚至可以预处理我的info.plist文件。显然,这可以通过多个目标来实现,但由于我可以拥有许多不同的应用程序“风格”,因此最好通过计划来实现,以保持目标的倒计时。我目前的想法是在预操作脚本期间添加这些预处理器定义,但我一生都找不到任何方法来更新GCC_预处理器_定义。既然它是一个环境变量,我不应该有权附加到GCC_预处理器_定义上吗

更糟糕的情况是,您可以为方案执行预构建脚本。但是,您必须为每个方案包含脚本:

我更愿意将其附加到配置:

然后,您可以轻松地为各种配置添加预处理器宏,就像我在这里进行调试一样:

_Prefix.pch文件是放置影响整个程序的宏的好地方,就像我在这里看到的:


在我的示例中,我们在不处于调试模式时有效地关闭了控制台输出,提供了一点速度提升。

在特定于目标的构建选项中定义多个目标和定义预处理器宏如何?然后,您只需要有一个方案,就可以一次性构建所有目标,所有目标都有自己的特定构建配置。

为了满足我允许方案设置预处理器定义的要求,我提出的最佳解决方案是让方案预操作和操作后脚本修改xcconfig文件。这个文件反过来会更新构建配置,设置预处理器定义,甚至允许我定义预处理器定义来有条件地修改info.plist。如果还有其他人这样做,请确保您考虑到源代码管理是如何处理此文件的


本文的问题和相关答案对我很有帮助:

如果我正确理解了您的问题,您希望将一些用户定义的预处理器宏添加到源代码中,有一种方法可以使用Xcode将它们添加到目标代码中。(例如GCC_预处理器_定义=使用_TAPJOY)

步骤1)确定马可的名字,例如使用_TAPJOY 步骤2)转到目标->选择选项卡“构建设置”(确保所有选项卡均已启用) 步骤3)在搜索框中搜索“预处理器宏”) 步骤4)检查调试/发布部分 步骤5)在那里输入您的马可

步骤6)在源代码中使用此宏,如下所示

For conditional include 

    #ifdef USE_TAPJOY
    #import <Tapjoy/Tapjoy.h>
    #endif

    For conditional source code
    #ifdef USE_TAPJOY        // Tapjoy Connect Notifications
            [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(tjcConnectSuccess:)
                                                         name:TJC_CONNECT_SUCCESS
                                                       object:nil];
            [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(tjcConnectFail:)
                                                         name:TJC_CONNECT_FAILED
                                                       object:nil];
    #endif
条件包含的

#ifdef使用_TAPJOY
#进口
#恩迪夫
对于条件源代码
#ifdef使用_TAPJOY//TAPJOY连接通知
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@selector(tjcConnectSuccess:)
名称:TJC_连接_成功
对象:无];
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@selector(tjcConnectFail:)
名称:TJC_连接_失败
对象:无];
#恩迪夫

祝你好运

谢谢你的建议。对于一些人来说,这可能是一个很好的解决方案。对于这个特定的项目,由于规模和数量的“口味”我将需要,这将很难维持。感谢达斯汀。如果可能的话,我想减少配置的数量。关于控制台输出的好提示。您的所有链接都已断开:(嗨,Christopher,您能对此进行扩展吗?您如何修改xcconfig文件?您可能想查看以下答案:这不是问题。问题是为每个方案设置不同宏的能力,同时只保留一个目标。