XCode 5.1 预处理器宏未生效。

6
我无法使这个宏编译出正确的代码。
以下是代码: enter image description here 以下是构建设置(我正在进行发布版本的构建): enter image description here 注意,GCC文档说-Dname将定义为1,因此在Release中我省略了“=1”: enter image description here 以下是编译日志,显示定义(黄色部分)已传递给命令行: enter image description here 以下是我的输出日志,显示代码的编译好像没有定义ADD_CAMERA_FEATURE: enter image description here 如果我在源码中加入#define ADD_CAMERA_FEATURE 1,则#ifdef按预期工作,但我也会收到警告,说我正在重新定义一个现有的宏。因此,XCode知道宏应该从构建方案设置中存在,但仍不包括#ifdef代码分支。
其他细节如下:
  1. XCode 5.1
  2. OS X 10.9.2
  3. iOS 7.1
我的目标是针对同一源代码构建iOS 7版应用程序和iOS 7之前版本的应用程序。我必须支持不能升级到iOS 7的旧设备,这种情况还会持续一段时间。也许有更好的方法来解决这个问题。任何关于如何完成此操作的建议都将不胜感激。

1
你清理了你的项目吗? - bbarnhart
1
“Scheme”设置?你确定吗?也许你的意思是配置、目标或项目? - Steven Fisher
1
@ChuckKrutsinger,你能通过预处理器运行那个文件吗?我可以从第一张截图的语法着色中看出它认为将运行第一个 NSLog。预处理器应该能够为我们确认这一点。 - matt
预处理器定义不会影响构建配置,它们只会影响方案的前/后处理。 - Steven Fisher
@matt:Scheme 影响构建的目标和配置。它不影响该配置,因此向方案添加预处理器定义是没有意义的。 - Steven Fisher
显示剩余18条评论
1个回答

5
发现问题所在,与目标和依赖项有关。我创建了一个新的目标来编译源文件,并向该目标添加了预处理器定义。然后将编译的对象链接到作为框架使用的静态库中。因此,我还为静态库创建了一个新目标。不幸的是,我忽视了静态库目标仍然依赖于原始编译步骤,该步骤没有包含预处理器定义。因此,即使我正确构建了对象文件,新的对象文件也不会在运行时链接到项目中。因此,在“Build Phases”下,针对静态库,我需要将目标依赖项更改为正确的对象文件,然后一切开始正常工作。感谢 @matt 和 @StevenFisher 指引我找到正确的设置。 enter image description here

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