104

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

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

#if TARGET_IPHONE_SIMULATOR
    ...
#endif
4

8 回答 8

116

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

根据斯蒂芬的评论,完整的语法是:

constant_1=VALUE constant_2=VALUE

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

于 2008-12-15T03:50:21.907 回答
86

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

如果您有多个使用相同前缀文件的目标或项目,请改用 Preprocessor Macros Not Used In Precompiled Headers,这样您的宏定义的差异不会触发一组不必要的额外预编译头文件。

于 2009-01-26T05:36:57.133 回答
41

作为附录,如果您使用这种技术在目标中定义字符串,这就是我必须定义和使用它们的方式:

在 Build Settings -> Preprocessor Macros 中,是的反斜杠在定义中很重要:

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

在源代码中:

objectManager.client.baseURL = APPURL_NSString;
于 2012-01-09T18:34:07.720 回答
5

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

于 2012-01-20T23:51:54.213 回答
3

它在“GCC 4.2 Preprocessing”下(或者只是在搜索框中输入“prepro”)......

...但是,对于我的一生,我无法让它发挥作用。

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

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

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

...从不打印/被调用。这让我疯狂...

于 2009-09-06T01:27:52.533 回答
2

对于 Xcode 9.4.1 和 C++ 项目。将const char*预处理器宏添加到调试发布版本。

  1. 选择您的项目

    选择项目

  2. 选择构建设置

    选择构建设置

  3. 搜索“预处理器宏

    搜索1 搜索2

  4. 打开互动列表

    打开互动列表

  5. 添加您的宏,不要忘记转义引号

    添加路径

  6. 在源代码中通用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");
    ...
    
于 2018-07-31T09:21:19.137 回答
1

为了回应 Kevin Laity 的评论(请参阅 cdespinosa 的回答),关于 GCC Preprocessing 部分未显示在您的构建设置中,请将 Active SDK 设置为在它之后显示(Base SDK)的那个,这部分将出现。您可以通过选择菜单 Project > Set Active Target > XXX (Base SDK) 来执行此操作。在不同版本的 XCode(Base SDK)中可能会有所不同,例如(项目设置或项目默认)。

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

于 2010-04-22T16:50:25.707 回答
0

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

于 2010-09-08T03:49:42.947 回答