Objective c 如何在Xcode中定义预处理器符号

Objective c 如何在Xcode中定义预处理器符号,objective-c,xcode,c-preprocessor,Objective C,Xcode,C Preprocessor,是否可以通过在Xcode项目中设置属性来设置条件编译的符号 我的目标是创建一个可供所有文件使用的符号,而不必使用导入/包含,以便一组公共类在某些项目中具有特殊行为。就像下面,但有我自己的符号 #if TARGET_IPHONE_SIMULATOR ... #endif 转到目标或项目设置,单击左下角的齿轮图标,然后选择“添加用户定义的设置”。新设置名称应为GCC\u预处理器\u定义,您可以在右侧字段中键入定义 根据Steph的评论,完整语法为: constant_1=VALUE con

是否可以通过在Xcode项目中设置属性来设置条件编译的符号

我的目标是创建一个可供所有文件使用的符号,而不必使用导入/包含,以便一组公共类在某些项目中具有特殊行为。就像下面,但有我自己的符号

#if TARGET_IPHONE_SIMULATOR
    ...
#endif

转到目标或项目设置,单击左下角的齿轮图标,然后选择“添加用户定义的设置”。新设置名称应为
GCC\u预处理器\u定义
,您可以在右侧字段中键入定义

根据Steph的评论,完整语法为:

constant_1=VALUE constant_2=VALUE

请注意,如果只想定义一个符号,而不是给它一个值(对于
#ifdef
语句),则不需要使用“=”

您不需要创建用户定义的设置。内置设置“预处理器宏”工作正常。

如果有多个目标或项目使用相同的前缀文件,请改用预编译头中未使用的预处理器宏,这样宏定义中的差异不会触发不必要的额外预编译头集。

它位于“GCC 4.2预处理”下(或只在搜索框中放入“预编译”)

……然而,就我个人而言,我无法让它发挥作用

我有我的标准调试和发布配置,我想在调试配置中定义Debug=1。但在将其作为值添加后:

(在设置窗口中)>预处理器宏:调试=1

#if DEBUG
    printf("DEBUG is set!");
#endif 

…从不打印/接到电话。这让我抓狂…

针对Kevin Layty关于GCC预处理部分未显示在构建设置中的评论(请参见cdespinosa的回答),将活动SDK设置为在其后面显示(基本SDK)的SDK,此部分将出现。您可以通过选择菜单“项目>设置活动目标>XXX(基本SDK)”来完成此操作。在不同版本的XCode(基本SDK)中,可能会有所不同,例如(项目设置或项目默认)


出现此部分后,您可以将定义添加到处理器宏中,而不是创建用户定义的设置。

您可以复制具有预处理部分的目标,将其重命名为您想要的任何名称,然后更改预处理器宏值。

作为附录,如果您使用此技术在目标中定义字符串,我必须这样定义和使用它们:

在“生成设置->预处理器宏”和“是”中,反斜杠在定义中非常重要:

APPURL_NSString=\@\"www.foobar.org\"
在源代码中:

objectManager.client.baseURL = APPURL_NSString;

可以使用
*\u Prefix.pch
文件声明项目范围的宏。
该文件通常在X<强>其他来源Gy.

< > XCord9.4.1和C++项目中。将
constchar*
预处理器宏添加到调试和发布版本中

  • 选择您的项目

  • 选择生成设置

  • 搜索“预处理器宏”

  • 打开交互式列表

  • 添加宏,别忘了转义引号

  • 在源代码中用作公共
    const char*

    ...
    #ifndef JSON_DEFINITIONS_FILE_PATH
    static constexpr auto JSON_DEFINITIONS_FILE_PATH = "definitions.json";
    #endif
    ...
    FILE *pFileIn = fopen(JSON_DEFINITIONS_FILE_PATH, "r");
    ...
    

  • 谢谢对任何感兴趣的人来说,语法看起来像“kVarOne=5 myVar=3.0”(不带引号),我通过反复试验找到了它。Ben你能编辑你的答案来说明吗?再次感谢,回答得太好了。因为这个,我还有头发。谢谢,谢谢+1(我希望它能更多)仅供参考,从Xcode 3.2.4开始,“预处理器宏”映射到GCC_预处理器_定义,Xcode将不再允许您进行用户定义(因为它已经可用)。这不再是左下角的齿轮图标,而是右下角的加号图标(在目标的构建设置选项卡上)。您应该更新此响应。再也没有齿轮图标了,如果构建设置中缺少此部分,您该怎么办?按照Ben Gotliebb的建议执行。但从Xcode的3.2.4版开始,“预处理器宏”映射到GCC_预处理器_定义。你不能用用户定义已经可用的东西。我在2019年发现自己在这里,使用Swift和Xcode 10.3,而不是“如果调试,请尝试”如果定义(调试)或“如果调试”。任何有上述相同问题的人都会觉得这很有帮助;它确实让我的
    #if DEBUG
    变得栩栩如生:)感谢这个解决方案,我一直在寻找类似的东西,但是堆栈溢出充满了过于复杂的解决方案。相关:“