Objective c 如何在Xcode中定义预处理器符号
是否可以通过在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
#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
变得栩栩如生:)感谢这个解决方案,我一直在寻找类似的东西,但是堆栈溢出充满了过于复杂的解决方案。相关:“