如何在Xcode中定义一个预处理符号

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

我的目标是创build一个可供所有文件使用的符号,而不必使用import / include,这样一组公共类就可以在某些项目中有特殊的行为。 像以下,但用我自己的符号。

#if TARGET_IPHONE_SIMULATOR ... #endif 

转到目标或项目设置,点击左下angular的齿轮图标,然后select“添加用户定义的设置”。 新的设置名称应该是GCC_PREPROCESSOR_DEFINITIONS ,您可以在右侧字段中input您的定义。

每Steph的评论,完整的语法是:

 constant_1=VALUE constant_2=VALUE 

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

您不需要创build用户定义的设置。 内置的“Preprocessormacros”设置工作得很好。 替代文字http://idisk.mac.com/cdespinosa/Public/Picture%204.png

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

作为一个附录,如果您正在使用这种技术来定义您的目标中的string,这是我必须定义和使用它们:

在“生成设置” – >“预处理器macros”中,以及是反斜杠在定义中至关重要:

 APPURL_NSString=\@\"www.foobar.org\" 

并在源代码中:

 objectManager.client.baseURL = APPURL_NSString; 

您可以使用*_Prefix.pch文件来声明项目范围的macros。 该文件通常在你的其他来源组。

它在“GCC 4.2预处理”(或者只是在search框中input“prepro”)…

但是,对于我来说,我无法完成它的工作。

我有我的标准debugging和释放configuration,我想在debuggingconfiguration中定义DEBUG = 1。 但是将其作为一个值添加后:

(在设置窗口中)>预处理器macros:DEBUG = 1

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

…从不打印/被调用。 这让我发疯

为了回应Kevin Laity的评论(请参阅cdespinosa的回答),关于GCC预处理部分没有在您的构build设置中显示,使Active SDK成为(Base SDK)之后的部分,此部分将会出现。 你可以通过select菜单Project> Set Active Target> XXX(Base SDK)来完成。 在不同版本的XCode(Base SDK)中可能会有所不同,如(Project Setting或Project Default)。

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

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