使用预处理器宏条件编译Xcode

时间:2012-08-08 17:50:29

标签: ios xcode

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

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

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

Apple LLVM compiler 3.0 - Preprocessing
  Preprocessor Macros    FULL_VERSION

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

为什么他们只在项目层面工作?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

预处理程序定义可以按预期对目标起作用,覆盖或继承项目设置。

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

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