是否可以通过在Xcode项目中设置属性来设置条件编译的符号?
我的目标是创建一个可供所有文件使用的符号,而不必使用import / include,这样一组公共类在某些项目中可能会有特殊行为。如下所示,但有我自己的符号。
#if TARGET_IPHONE_SIMULATOR
...
#endif
答案 0 :(得分:113)
转到目标或项目设置,单击左下方的齿轮图标,然后选择“添加用户定义的设置”。新设置名称应为GCC_PREPROCESSOR_DEFINITIONS
,您可以在右侧字段中输入您的定义。
Per Steph的评论,完整的语法是:
constant_1=VALUE constant_2=VALUE
请注意,如果您只想#define一个符号,而不是给它一个值(#ifdef
语句),那么 <= i>
答案 1 :(得分:86)
您无需创建用户定义的设置。内置设置“预处理器宏”工作得很好。 alt text http://idisk.mac.com/cdespinosa/Public/Picture%204.png
如果您有多个使用相同前缀文件的目标或项目,请改用预编译头中未使用的预处理器宏,因此宏定义中的差异不会触发不必要的额外预编译头集。
答案 2 :(得分:40)
作为附录,如果您使用此技术在目标中定义字符串,这就是我必须定义和使用它们的方式:
在构建设置中 - &gt;预处理器宏和是反斜杠在定义中至关重要:
APPURL_NSString=\@\"www.foobar.org\"
在源代码中:
objectManager.client.baseURL = APPURL_NSString;
答案 3 :(得分:5)
您可以使用*_Prefix.pch
文件来声明项目范围的宏。
该文件通常位于其他来源组中。
答案 4 :(得分:2)
它在“GCC 4.2预处理”下(或者只是在搜索框中输入“prepro”)...
...然而,对于我的生活,我无法让它发挥作用。
我有标准的Debug和Release配置,我想在调试配置中定义DEBUG = 1。但在将其添加为值后:
(在设置窗口中)&gt;预处理器宏:DEBUG = 1
#if DEBUG
printf("DEBUG is set!");
#endif
...从不打印/被调用。这让我发疯了......
答案 5 :(得分:1)
回应Kevin Laity的评论(请参阅cdespinosa的回答),关于GCC预处理部分未在您的构建设置中显示,请将Active SDK设置为(Base SDK)之后的部分,并显示此部分。您可以通过选择菜单Project&gt;来完成此操作。设置活动目标&gt; XXX(基本SDK)。在不同版本的XCode(Base SDK)中可能有所不同,例如(Project Setting或Project Default)。
出现此部分后,您可以将定义添加到处理器宏,而不是创建用户定义的设置。
答案 6 :(得分:1)
对于Xcode 9.4.1和C ++项目。将const char*
预处理程序宏添加到 Debug 和 Release 版本中。
答案 7 :(得分:0)
您可以复制具有预处理部分的目标,将其重命名为您想要的任何名称,然后更改预处理器宏值。