是否可以通过在 Xcode 项目中设置属性来设置条件编译的符号?
我的目标是创建一个可用于所有文件的符号,而不必使用导入/包含,以便一组通用类在某些项目中具有特殊行为。如下所示,但带有我自己的符号。
#if TARGET_IPHONE_SIMULATOR
...
#endif
是否可以通过在 Xcode 项目中设置属性来设置条件编译的符号?
我的目标是创建一个可用于所有文件的符号,而不必使用导入/包含,以便一组通用类在某些项目中具有特殊行为。如下所示,但带有我自己的符号。
#if TARGET_IPHONE_SIMULATOR
...
#endif
转到您的目标或项目设置,单击左下角的齿轮图标,然后选择“添加用户定义的设置”。新设置名称应为GCC_PREPROCESSOR_DEFINITIONS
,您可以在右侧字段中键入您的定义。
根据斯蒂芬的评论,完整的语法是:
constant_1=VALUE constant_2=VALUE
请注意,如果您只想#define 一个符号而不是给它一个值(对于语句) ,则不需要'='#ifdef
您不需要创建用户定义的设置。内置设置“预处理器宏”工作得很好。 替代文字 http://idisk.mac.com/cdespinosa/Public/Picture%204.png
如果您有多个使用相同前缀文件的目标或项目,请改用 Preprocessor Macros Not Used In Precompiled Headers,这样您的宏定义的差异不会触发一组不必要的额外预编译头文件。
作为附录,如果您使用这种技术在目标中定义字符串,这就是我必须定义和使用它们的方式:
在 Build Settings -> Preprocessor Macros 中,是的反斜杠在定义中很重要:
APPURL_NSString=\@\"www.foobar.org\"
在源代码中:
objectManager.client.baseURL = APPURL_NSString;
您可以使用该*_Prefix.pch
文件来声明项目范围的宏。该文件通常在您的其他来源组中。
它在“GCC 4.2 Preprocessing”下(或者只是在搜索框中输入“prepro”)......
...但是,对于我的一生,我无法让它发挥作用。
我有标准的调试和发布配置,我想在调试配置中定义 DEBUG=1。但是在将其添加为值之后:
(在设置窗口中)> 预处理器宏:DEBUG=1
#if DEBUG
printf("DEBUG is set!");
#endif
...从不打印/被调用。这让我疯狂...
对于 Xcode 9.4.1 和 C++ 项目。将const char*
预处理器宏添加到调试和发布版本。
为了回应 Kevin Laity 的评论(请参阅 cdespinosa 的回答),关于 GCC Preprocessing 部分未显示在您的构建设置中,请将 Active SDK 设置为在它之后显示(Base SDK)的那个,这部分将出现。您可以通过选择菜单 Project > Set Active Target > XXX (Base SDK) 来执行此操作。在不同版本的 XCode(Base SDK)中可能会有所不同,例如(项目设置或项目默认)。
出现此部分后,您可以将定义添加到处理器宏,而不是创建用户定义的设置。
您可以复制具有预处理部分的目标,将其重命名为您想要的任何名称,然后更改您的预处理器宏值。