什么是正确的方式来configurationXCode 4工作空间来build立依赖关系?

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

以下是我如何configuration构build:

  • 将主应用程序构build设置中的“用户标题searchpath”指向库项目位置(通过源树)
  • 在我的应用程序的主要目标的编辑器 – >构build阶段 – >“与库链接二进制”部分,添加了我想要使用的库产品。
  • 在该scheme中,勾选“查找隐式相关性”

干净的(并删除派生的数据)后,生成在我的主要项目的构build过程中,我得到这个错误:

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 

果然,如果我查看新创build的派生数据,唯一find的对象文件是主应用程序,而不是库。 对* .o文件进行广泛的“查找”并不能揭示任何相关内容,所以库不会丢失,它们肯定不会被构build。

一些补充要点:

  • 当我在Apple开发论坛上询问这个问题时,有人build议我应该在主目标的Build Phases-> Target Dependencies编辑器中添加明确的代码。 但是,您只能在同一个项目或子项目中将目标添加到目标; 在我的情况下,我有应用程序和库项目作为工作场所的兄弟姐妹。
  • 如果我在主构build之前手动构build每个库,一切都很好。

更新:

我刚想出了一个解决方法,就是把所有代码的目标join到主应用程序的“构build”部分。 我之前尝试过,但没有成功,但没有意识到,我可以拖动目标周围的目标,以获得正确的构build顺序。 现在构build以正确的顺序进行,无论是在清理之后,还是在更改库或主应用程序源之后。

我在这里留下的问题,因为手动清理生成订单肯定不应该是必要的。 我如何设置事物一定是有问题的。

编辑scheme(交换构build目标,取消/检查“并行化构build”和/或“查找隐式依赖关系”)对我来说不起作用。 我仍然需要在静态库中更改任何代码之后清理构build项目。 search开发论坛,我终于find了这个答案 ,这创造了奇迹。

确保“身份和types”检查器显示并select应用程序项目(不是库)中的libWhatever.a文件。 如果您看到位置:相对于项目[或相对于组],这是您的问题。

  1. 单击相对于项目并将其更改为相对于构build产品。
  2. 这将改变链接的types,但它仍然会被打破。
  3. 点击定位button,find输出文件。

通过Build Phases – > Link Binary with Libraries将静态库添加到现有项目中会自动使其 “相对于组”(如果两个都是同一个工作空间中的同胞)。 上面描述的方式改变了它的位置解决了构build依赖关系问题,在项目导航器中.a文件应该以黑色字母(而不是红色)显示。

我在这里描述了我在工作区中设置多个projets的方式: http : //blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

我同意,根据Xcode的文档,手动调整scheme中的构build目标顺序应该是不必要的,但这是迄今为止我find的最好的解决scheme。


编辑:只要有可能,我build议使用https://github.com/CocoaPods/CocoaPods来pipe理此时的项目依赖关系。;

尝试将库项目拖到主项目中:

主项目内的图书馆项目参考

在我的情况下,我可以有兄弟configuration构build的唯一方法是手动添加path“../MyLibProject/build/Debug-iphoneos”(检查recursion只是为了确保)在我的生成设置 – >库searchpath。 在主项目中单独添加.a文件并不能防止链接时出现“lib not found”错误。