目标预处理器宏在Xcode中被预处理器忽略

Iul*_*rei 10 xcode preprocessor preprocessor-directive

我加入TEST=1Preprocessor Macros项目目标的部分Build Settings,每当我在代码中使用它,预处理器认为它没有定义.

  1. alt +点击它会显示一个问号
  2. 语法着色不起作用
  3. 语法自动完成功能不起作用

例如,拥有:

#if TEST

// a

#else

// b

#endif
Run Code Online (Sandbox Code Playgroud)

有这种行为:

  1. 语法着色仅适用于 // b
  2. 语法自动完成仅适用于 // b

这是因为预处理器无法找到TEST(即使它被定义为1,如我之前所述),所以它将其视为存在false.

有什么方法可以解决这些问题吗?

编辑:

我的用例与多个项目目标有关.因此,假设初始目标已命名First,其中TEST预处理器宏已定义为value 1.

如果我创建了一个名为另一个项目目标Second未使用指定的预处理器宏和想添加一些代码,它只有当TEST0(false没有定义/),我把它放在#else块(// b).

知道语法着色和自动完成适用// b,看起来它可以正常工作,但如果我将当前目标更改为First一个(双关语)甚至构建它,它仍然按照Second选择的方式工作.

cde*_*urs 7

如果要在Swift中这样做,则应添加一个User-Defined以命名的设置OTHER_SWIFT_FLAGSBuild Settings如下所示:

OTHER_SWIFT_FLAGS用户定义的设置

然后在您的代码中键入:

#if TEST1

// Debug

#endif

#if TEST2

// Release

#endif
Run Code Online (Sandbox Code Playgroud)

我不知道您为什么需要这样做,但是研究本机Xcode Target以便对具有相同根项目的多个应用程序使用特定的行为可能会很有趣。如果这是您想要的,则应查看以下文章:使用Targets和XCode的AppCoda


Har*_*pta 5

只需转到目标->编辑方案->运行->信息并检查构建配置。现在,在构建设置中添加预处理器宏时,只需确保添加宏以实现正确的构建配置和正确的目标。

\n\n

\xe2\x89\x88

\n\n

我尝试为我的目标应用程序(Test-ObjectiveC)添加如上所述的调试和发布版本。因此,当我使用此设置尝试下面的代码时,您可以相应地看到语法颜色。

\n\n

在此输入图像描述

\n