在不同的编译目录Xcode的依赖呢?(Xcode dependencies across diffe

2019-07-18 21:03发布

我试图设立的Xcode为一个包含多个可执行文件和静态库的项目。 我创建了多个目标,并建立了链接和依赖关系,并初步一切都很正常。 美中不足的...

这是一个已经有Visual Studio和Makefile将现有项目。 那些建立在把一个lib / Debug目录库和可执行文件在斌/调试 。 因此,在Xcode中,我改变了构建产品路径“LIB”及“块”(所以我们可以使用所有平台的一组文档)。 这使得编译后的目标在正确的地方,而是完全打破了两个链接(库未找到)和依赖性。

我可以通过添加$(SRCROOT)/ lib中/调试到库搜索路径为每个可执行固定链接(但感觉像Xcode中应该能算出这个对自己,这让我觉得我做错了什么)。

但是 - 我无法弄清楚如何获得的依赖性再次合作。 如果我更改库的源文件,该库将重建,但不依赖可执行文件。 如果我强迫可执行文件的Xcode的构建返回,而不做任何事情的成功; 它认为目标是最新的。 如果我清理目标,然后重建它的工作原理。

所以,在这里任何想法? 是的Xcode在这方面是从根本上愚蠢,抑或是我(我倾向于后者)?

更新:我已经发布了一个样本项目来演示在这个问题http://share.industriousone.com/XcodeDepsIssue.zip 。 构建一次,然后修改MyStaticLib.c并重新构建它。 该可执行文件将不会重新链接(应该)。 非常感谢在这一个任何帮助。

Answer 1:

starkos,感谢您发布的结论。 这验证了我的经历。 这种情况真的搞砸了我,所以很高兴知道我不只是失去了一些东西。

然而,我却发现,避免创建多个项目或保持库及其相关联在同一目录下的解决方法。 这是一个黑客,但它确实在这里工作。

我知道这是一个有点晚,但总比没有好。

对于依赖库,添加“复制文件构建阶段”,以绝对路径作为目标和路径文本字段应该是在从属目标生活的目录。 然后点击产品,找到依赖库(将与.A结束),并将其拖到“复制文件生成阶段。” 如果现在建立,这将会把图书馆变成自己的目录像以前一样,然后也把它复制到相关的目标目录。

对于依赖,你现在可以删除该库搜索路径依赖的输出目录。 这将导致它找到库副本。 如果你这样做,因确实将每个依赖性。一个是重新连接时重新连接。

不利的一面在于,当然,对于副本的额外的时间,以及有必要指定(在复制阶段)为每个依赖库的目标目录。 击败了地狱,虽然替代品....



Answer 2:

Xcode中不会自动建立基于使用的构建产品的相关性; 你必须自己设立明确的目标相关性。

项目>编辑目标设置,常规选项卡,+按钮,添加一些先决条件建设所选择的目标的任何目标。 这应该让你去一次。



Answer 3:

我一些更多的研究,这一点,答案是否定的,Xcode的3.X不跟踪生活在不同的目录中的目标之间的依赖关系。 您可以通过给每个图书馆自己的项目,并且将每个部分的主项目的解决它。 或者,你可以把所有的你的目标在一个目录。 挑选你的毒药。



Answer 4:

这里是我在Xcode 4.3.1这种怪异的行为的解决方案。 你必须在方案中添加预生成的行动:

rm -f ${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}

并选择其构建设置使用这个脚本。 每次构建之前,目标可执行文件将被删除,完全重建。 它帮助我,我希望它可以帮助你。

注:试图把这个脚本在项目建设阶段,结果为阴性 - 调试器无法连接过程开始调试。

祝好运!



Answer 5:

OK,这将有助于有链接的文字...构建符合失败线。 但几件事情:

1)你不应该链接到任何东西$(SRCROOT)。 这就是你的项目源。 这两个地方找东西链接是$(SYMROOT)(生成产品目录)或$(DSTROOT)(已安装的产品目录)。

有一两件事你可以做的是有一个共同的build目录,然后使用“xcodebuild联编安装”的行动来安装产品的安装目录。 另一种方法是使用一个拷贝文件建立阶段建成后把它们拷贝,这样你就可以在$(SYMROOT)对他们的链接,但仍让他们在那里您的Windows同胞期待他们。

有可能是一个方法来正确设置每个目标生成产品目录,但我真的看项目本身弄明白。



文章来源: Xcode dependencies across different build directories?