2017-03-02 138 views
8

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

  1. ALT +点击它显示了一个问号
  2. 语法着色不工作以及
  3. 语法自动完成工作不正常

例如,具有:

#if TEST 

// a 

#else 

// b 

#endif 

有这种行为:

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

这是因为预处理器不能找到TEST(即使它定义为1,正如我前面提到),所以它将其视为false

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

编辑:

我的使用情况与多个项目目标。因此,假设初始目标名为First,其中TEST预处理器宏定义为值1

如果我创建一个没有定义预处理宏命名为Second另一个项目的目标和要添加一些代码,它只有在TEST是(没有定义false /)0,我把它放在#else块(// b)。

知道了语法着色和自动完成工程// b,它看起来像它工作正常,但由于选择Second如果我改变当前目标的First一个(双关语意),甚至构建它,它仍然有效。

+0

如果您构建项目,预处理器将检测编译时间标志并显示着色和自动完成。你尝试过吗? – manishg

+0

当然我建立了这个项目。 –

+0

您是否为调试和发布做了这件事?它在我的最后。 – manishg

回答

1

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

≈

我试图通过增加对两种调试和发布如上建立我的目标应用程序(测试的ObjectiveC)。所以当我用下面的代码尝试下面的代码时,你可以看到相应的语法颜色。

enter image description here

+0

当你点击它时会发生什么? –

+0

@lulian不确定你想用cmd +单击来检查。 –

+0

我只是想知道是否知道打开'Build Settings',或者它是否显示问号,如我的例子。我的大项目可能会有其他设置干扰此项目。我会尝试自己在一个新项目中进行测试,并尝试查找问题是否是由我的一个设置引起的。 –

1

如果你想要做这样的斯威夫特,你应该在你的Build Settings添加一个名为OTHER_SWIFT_FLAGS一个User-Defined设置是这样的:

OTHER_SWIFT_FLAGS user-defined setting

然后在你的代码中键入:

#if TEST1 

// Debug 

#endif 

#if TEST2 

// Release 

#endif 

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