Ios XCode 5.1预处理器宏不工作

Ios XCode 5.1预处理器宏不工作,ios,objective-c,xcode,macros,Ios,Objective C,Xcode,Macros,我无法让这个宏编译正确的代码 代码如下: 以下是构建设置(我正在进行发布构建): 请注意,GCC文档中说-Dname将定义为1,因此我在发布时省略了“=1”: 下面是显示定义(黄色)已在命令行上传递的编译日志: 这是我的输出日志,显示代码的编译方式与未定义ADD_CAMERA_功能类似: 如果我在源代码中添加#define ADD_CAMERA_功能1,#ifdef会按预期工作,但我也会收到一条警告,提示我正在重新定义现有宏。因此XCode知道宏应该存在于构建方案设置中,但仍然不包括代码

我无法让这个宏编译正确的代码

代码如下:

以下是构建设置(我正在进行发布构建): 请注意,GCC文档中说-Dname将定义为1,因此我在发布时省略了“=1”:

下面是显示定义(黄色)已在命令行上传递的编译日志:

这是我的输出日志,显示代码的编译方式与未定义ADD_CAMERA_功能类似:

如果我在源代码中添加#define ADD_CAMERA_功能1,#ifdef会按预期工作,但我也会收到一条警告,提示我正在重新定义现有宏。因此XCode知道宏应该存在于构建方案设置中,但仍然不包括代码的#ifdef分支

其他详情:

  • XCode 5.1
  • OS X 10.9.2
  • iOS 7.1

  • 我的目标是要有一个构建iOS 7版本的应用程序的目标和一个构建iOS 7之前版本的应用程序的目标,两者都来自同一个源。我必须支持在一段时间内无法升级到iOS 7的旧设备。也许有更好的方法来解决这个问题。任何关于如何实现这一点的建议都将不胜感激。

    发现了问题。它与目标和依赖关系有关。我创建了一个新目标来编译源文件,并将预处理器定义添加到该目标中。然后,该编译对象被链接到一个用作框架的静态库中。因此,我还为静态库创建了一个新目标。不幸的是,我忽略了静态库目标仍然依赖于未包含预处理器定义的原始编译步骤。因此,即使我正确地构建了对象文件,新的对象文件也不是运行时链接到项目中的文件。因此,在静态库的构建阶段,我需要将目标依赖项更改为正确的对象文件,然后一切都开始工作。感谢@matt和@StevenFisher为我指出正确的设置


    你清理了你的项目吗?刚刚尝试了一个清理和构建。同样的结果。编译日志显示您正在进行发布构建。请尝试同样的方法进行调试生成。它在那里工作正常吗?(我这样问是因为我无法在这里重现问题。)方案设置?你确定吗?也许你指的是配置、目标或项目?@ChuckKrutsinger你能通过预处理器运行该文件吗?从第一个屏幕截图中的语法着色可以看出,它认为它将运行第一个NSLog。预处理器应该为我们确认这一点。