ios - XCode 5.1 预处理器宏不工作

标签 ios objective-c xcode macros

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

代码如下: enter image description here

这里是build设置(我正在做一个发布构建): 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 的旧设备。也许有更好的方法来解决这个问题。任何有关如何实现此目的的建议都将不胜感激。

最佳答案

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

enter image description here

关于ios - XCode 5.1 预处理器宏不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359524/

相关文章:

ios - 将 NSData 转换为 NSString 返回随机字符

ios - 无法在 cocoa touch uiview 类和 Storyboard 中的 subview 之间控制拖动 xcode

ios - 获取链接并消除所有困惑并仅关注内容 - 在 Objective-C 中执行此操作的最佳方法是什么?

ios - NSManagedObject 不能符合 Swift 中的协议(protocol)

iphone - 应用内购买完成后是否可以收到通知?

ios - UINavigationBar 上的自定义字体不起作用

ios - UITableView 半粘性 tableView Header 类似 App Store 详细 View

objective-c - 在 iphone 应用程序中解析和替换 @usernames 和 URL

iphone - 无法呈现 modalViewController

ios - 向 UITableView 添加行时更新无效