【问题标题】:XCode 5.1 preprocessor macro not workingXCode 5.1 预处理器宏不起作用
【发布时间】:2014-04-17 01:26:20
【问题描述】:

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

代码如下:

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

这是编译日志,显示定义(黄色)是在命令行中传递的:

这是我的输出日志,显示代码已编译为好像未定义 ADD_CAMERA_FEATURE:

如果我将#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 的旧设备。也许有更好的方法来解决这个问题。任何有关如何完成此任务的建议将不胜感激。

【问题讨论】:

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

标签: ios objective-c xcode macros


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2015-02-26
    相关资源
    最近更新 更多