0

我有一个带有两个目标的 iOS 项目,一个是完整版,另一个是精简版。我正在使用以下代码来隐藏/显示功能。

#ifdef FULL_VERSION
  NSLog(@"Full version");
#endif 

如果我在项目级别定义预处理器宏,这很有效,但是当我将它们设置在目标级别时,它们不起作用。顺便说一句,我是这样设置它们的:

Apple LLVM compiler 3.0 - Preprocessing
  Preprocessor Macros    FULL_VERSION

我需要在目标级别定义它们以便知道哪个版本正在运行。

任何想法为什么他们只在项目级别工作?

4

3 回答 3

1

我的问题是该计划没有指向正确的目标。编辑方案解决了这个问题。

于 2012-08-20T20:36:17.313 回答
0

在您的目标中,对于所有“预处理器宏”,请确保您具有与代码中使用的完全相同的定义,以使用“FULL_VERSION”(减去引号)。展开该框以绝对确定每个配置也都有定义。

您实际上可以通过选择左侧窗格中的右侧图标并选择最顶部的“Build”来查看编译器正在执行的操作。找到正在编译的文件,选择该行,然后单击该行中最右侧的图标以查看实际的编译命令。我有两个预处理器定义,您可以在下面看到。此外,选择那个巨大的编译行,将其粘贴到一个空的 TextEdit 窗口中,然后搜索“-D” - 你应该在那里看到 -DFULL_VERSION。如果你没有看到你没有在构建命令中正确输入它 - 错误的目标,错误的配置等。在使用 Xcode 的 8 年中,我从未见过这个功能失败。

我的编译行之一:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch i386 -fmessage-length=0 -std=c99 -fobjc-arc … -DUNIVERSAL -DDEBUG=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk -fexceptions … LTSharing.m -o ...LTSharing.o 
于 2012-08-08T21:35:38.760 回答
0

预处理器定义确实按预期在目标上工作,覆盖或继承项目设置。

一个常见的错误是仅在一个(未使用的)配置上设置构建设置。检查您是否在所有配置上设置了预处理器定义。

您可以检查构建日志 (Command-7) 以查看是否将正确的选项传递给编译器:搜索-DFULL_VERSION.

于 2012-08-09T16:41:42.680 回答