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

时间:2008-12-15 02:52:04

标签: objective-c xcode c-preprocessor

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

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

#if TARGET_IPHONE_SIMULATOR
    ...
#endif

8 个答案:

答案 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 版本中。

  1. 选择您的项目

    select project

  2. 选择构建设置

    select build settings

  3. 搜索“ 预处理器宏

    search1 search2

  4. 打开交互式列表

    open interactive list

  5. 添加您的宏,别忘了用引号引起来

    add path

  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");
    ...
    

答案 7 :(得分:0)

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