【问题标题】:Target dependencies vs. Link binary with libraries目标依赖与链接二进制文件与库
【发布时间】:2012-10-17 09:29:08
【问题描述】:

我不明白这些 Xcode 功能之间的区别。

我正在构建应用程序 - 但应用程序的功能被抽象到库中(因此它们可以作为“SDK”单独分发)。

所以我有一个库项目和应用项目的工作区。我可以通过“将二进制文件与库链接”将库项目添加到应用程序项目中。这为我提供了当前工作区中的 .a 库项目列表,我可以链接到这些项目。

我也可以在这里添加框架。

在“目标依赖项”位中,我只能添加当前项目中的其他目标。

我真正想做的是两者兼有 - 我希望我的应用项目在构建时构建所有其他库项目。我还想详细说明应用程序(和其他库)依赖所依赖的库。

那么有人可以解释一下区别吗?我正在做的事情是否正确?

非常感谢!

【问题讨论】:

  • 我从来没有想通,但是 - 如果您在同一个工作区中有单独的项目并且您的应用程序使用 lib 文件,那么它每次都会自动构建。我遇到了一些问题,它不是每次都从头开始构建,但是如果我更改库项目中的任何内容,我会通过清理然后构建来解决它。
  • 这表明您需要两者。 xs-labs.com/en/archives/articles/xcode-static-libraries。不过似乎是多余的。如果您要链接到二进制文件,那么这肯定意味着它依赖于它吗?
  • 对于任何访问此问题的人,这里是awesome blog。
  • 另一个有用的资源是 WWDC 18 的 Behind the Scenes of the Xcode Build Process,这是一个相当高级的视频。

标签: xcode


【解决方案1】:

上面写着here...

  1. 将您的框架产品(位于 Products 文件夹中)拖到应用程序的现有 Link Binary With Libraries 构建阶段 目标。这会导致应用链接到您的框架。

还有……

  1. 在检查器窗口的常规选项卡中,将您的框架添加为应用程序的依赖项。添加此依赖项会导致 Xcode 在构建应用程序目标之前构建框架目标。

您在应用程序目标中建立的构建依赖关系导致 在应用程序之前构建的框架。这个很重要 因为它保证你的框架的构建版本将是 可用于链接和嵌入应用程序。因为 这个依赖,你可以设置你的 Xcode 项目的活动目标 到您的应用程序中,然后将其留在那里。

所以看来你应该同时使用两者。不过,这似乎是多余的,因为如果您要链接到一个框架,那么它就是一个依赖项。我想您可能只想链接到一个库而不是先构建它。尽管 XCode 似乎构建了链接库,即使它们没有被添加到依赖部分。这可能是方案构建设置中“查找隐式依赖项”选项的结果。

【讨论】:

    【解决方案2】:

    我做了类似的事情,并在最终的可执行目标中明确设置了“标题搜索路径”和“库搜索路径”。然而,这一切都取决于生成对象的位置。最初我将它设置在源树中(实际上是一个名为 build 的同级目录),但是在更改 Xcode DerivedData 目录的位置并告诉它构建到该目录后,项目不再构建。

    最终的解决方案是简单地删除“标题/库搜索路径”的显式设置并正确设置目标依赖项。这样就可以毫无问题地构建项目以进行调试和归档。

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2013-10-06
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多