xcode - 在需要时配置 Xcode 4 工作区以构建依赖项的正确方法是什么?

标签 xcode build xcode4

我的情况很简单,一个包含两个同级项目的工作区:一个主 (iOS) 应用程序和一个构建应用程序使用的多个静态库目标的项目。

这是我配置构建的方式:

  • 将主应用的build设置中的“用户 header 搜索路径”指向库项目位置(通过源代码树)
  • 在我应用的主要目标编辑器 -> 构建阶段 -> “Link Binary With Libraries”部分中,添加了我想要使用的库产品。
  • 在方案中,勾选“查找隐式依赖项”

在清理(并删除派生数据)之后,构建在主项目的构建过程中向我发出了这个错误:

ld: library not found for -lChipmunk
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

果然,如果我查看新创建的派生数据,找到的唯一目标文件是主应用程序,而不是库。 *.o 文件的广泛“发现”并没有揭示任何相关内容,因此这些库并没有丢失,它们肯定没有被构建。

补充几点:

  • 当我在 Apple 开发论坛上询问这个问题时,有人建议我应该在主要目标的 Build Phases->Target Dependencies 编辑器中添加明确的 deps。但是这里只能将deps添加到same项目或子项目中的targets;就我而言,我将应用程序和库项目作为工作场所的 sibling 。
  • 如果我在主构建之前手动构建每个库,一切都很好。

更新:

我刚刚想出了一个解决方法,即将所有的 deps 目标添加到主应用程序方案的“构建”部分。我之前尝试过但没有成功,但没有意识到我可以在列表中拖动目标以获得正确的构建顺序。现在,构建以正确的顺序发生,无论是在清理之后,还是在库或主应用程序源发生更改之后。

我将问题留在这里,因为肯定不需要手动整理构建顺序。我的设置方式一定有问题。

最佳答案

编辑方案(交换构建目标,取消/选中“Parallelize Build”和/或“Find Implicit Dependencies”)对我不起作用。在静态库中的任何代码更改之后,我仍然必须清理构建项目。搜索开发论坛,我终于找到了this answer ,这创造了奇迹。

Make sure the Identity and Type inspector is showing and select the libWhatever.a file in your application's project (not the library). If you see Location: Relative to Project [or Relative to Group], this is your problem.

  1. Click Relative to Project and change it to Relative to Build Products.
  2. This will change the type of the link, but it will still be broken.
  3. Click the locate button and find the output file.

通过 Build Phases 将静态库添加到现有项目 -> Link Binary with Libraries 自动使其“相对于组”(如果两者都是同一个工作区)。以上述方式更改其位置可解决构建依赖问题,并且在项目导航器中,您的 .a 文件应显示为黑色字母(而不是红色)。

关于xcode - 在需要时配置 Xcode 4 工作区以构建依赖项的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427396/

相关文章:

ios - 尝试在 iOS 中查找反向相同的最长子字符串时出现内存错误

iphone - 如何仅在 iOS 5 上执行代码而不破坏应用程序

xcode - 同一工作区中两个项目之间的目标依赖关系

Xcode 不会 promise GIT

iphone - XCode 4 上缺少文件,显示警告文件 ://localhost/. ../WaveView.h : warning: Missing file:/. .../WaveView.h 从工作副本中丢失

xcode - 如何摆脱设备相机授权警告?

xcode - Spin Control.app 的替代品

build - 在 Docker 容器中编译 libsass

iphone - 更改了iPhone应用程序目标名称,现在应用程序“运行完成”

ios - 在 iOS 5.1 应用程序中;为什么我看不到异常?