【问题标题】:Target Preprocessor Macros are ignored by the preprocessor in Xcode目标预处理器宏被 Xcode 中的预处理器忽略
【发布时间】:2017-03-02 12:06:59
【问题描述】:

我在项目目标的Build SettingsPreprocessor Macros 部分添加了TEST=1,每当我在代码中使用它时,预处理器都会认为它没有定义。

  1. alt + 点击它会显示一个问号
  2. 语法着色效果不佳
  3. 语法自动完成不能正常工作

例如,有:

#if TEST

// a

#else

// b

#endif

有这种行为:

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

这是因为预处理器找不到TEST(即使它被定义为1,正如我之前所说),所以它把它当作false

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

编辑:

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

如果我创建另一个名为 Second 且未定义预处理器宏的项目目标,并且仅当 TEST0false/未定义)时才想为其添加一些代码,我会将其放入#else 块 (// b)。

知道语法着色和自动完成功能适用于 // b,看起来它工作正常,但如果我将当前目标更改为 First 之一(双关语)甚至构建它,它在选择Second 时仍然有效。

【问题讨论】:

  • 如果您构建项目,预处理器将检测编译时间标志并显示着色和自动完成。你试过吗?
  • 我当然建了这个项目。
  • 您是否同时进行了调试和发布?它对我有用。
  • 这与构建配置无关。我更新了我的问题。

标签: xcode preprocessor preprocessor-directive


【解决方案1】:

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

然后在你的代码中输入:

#if TEST1

// Debug

#endif

#if TEST2

// Release

#endif

我不知道您为什么需要这个,但研究原生 Xcode Target 可能会很有趣,以便为具有相同根项目的多个应用程序使用特定行为。如果这是你想要的,你应该看看这篇文章:AppCoda using Targets with Xcode

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 当你 cmd + 点击它时会发生什么?
    • @lulian 不确定你想用 cmd + click 在那里检查什么。
    • 我只是想知道它是否知道打开Build Settings 或者它是否像我的示例一样显示问号。我的大项目的其他设置可能会干扰这一点。我会尝试自己在一个新项目中对其进行测试,并尝试找出问题是否是由我的某个设置引起的。
    【解决方案3】:

    我可以通过设置“Target->Build Settings->All->Swift Compiler - Custom Flags -> Active Compilation Conditions”使其工作。

    XCode 12.3 版

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2017-04-04
      相关资源
      最近更新 更多