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

20

我在项目目标的Build Settings中的Preprocessor Macros部分添加了TEST=1,但是每当我在代码中使用它时,预处理程序都认为它未定义。

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

例如,有:

#if TEST

// a

#else

// b

#endif

这种行为表现为:

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

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

有没有办法解决这些问题?

编辑:

我的用例涉及多个项目目标。因此,假设最初的目标名为First,其中定义了具有值1TEST预处理器宏。

如果我创建另一个项目目标,命名为Second,未定义任何预处理器宏,并且只想在TEST0false/未定义)时为其添加一些代码,则将其放置在#else块(// b)中。

知道语法着色和自动完成适用于// b后,看起来它工作正常,但如果我将当前目标更改为First(意图明显),甚至构建它,它仍然像选择了Second一样工作。


如果您构建该项目,预处理器将检测编译时标志,并显示着色和自动完成。您试过了吗? - manishg
当然我建造了这个项目。 - Iulian Onofrei
你是在调试和发布两种模式下都测试过了吗?在我的电脑上它可以运行。 - manishg
这与构建配置无关。 我更新了我的问题。 - Iulian Onofrei
3个回答

19
如果你想在Swift中这样做,你应该在Build Settings中添加一个名为OTHER_SWIFT_FLAGSUser-Defined设置,像这样:

OTHER_SWIFT_FLAGS user-defined setting

然后在您的代码中输入:

#if TEST1

// Debug

#endif

#if TEST2

// Release

#endif

我不知道你为什么需要这个,但是研究一下原生的Xcode目标可能会很有趣,可以在同一个根项目中为多个应用程序使用特定的行为。如果这是你想要的,请查看这篇文章: AppCoda使用Xcode的目标


5

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

≈

我尝试为我的目标应用程序(Test-ObjectiveC)添加调试和发布构建,就像上面所述。因此,当我使用以下代码进行测试时,您可以根据此设置看到语法颜色。

enter image description here


当你按下 cmd + 点击它时会发生什么? - Iulian Onofrei
@lulian 不确定你想用 cmd + 点击 检查什么。 - Harish Gupta
我只是想知道它是否知道如何打开“构建设置”,或者是否像我的示例中一样显示问号。可能有其他设置干扰了我的大型项目。我将尝试在新项目中自行测试,并尝试找出问题是否由我的某个设置引起。 - Iulian Onofrei

3
我能够通过设置“目标- >构建设置->全部->Swift编译器 - 自定义标志->活动编译条件”使其正常工作。
XCode版本12.3。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接