我正在开发一个相当复杂的iOS应用程序.为了使开发合理化,我开始将每个模块开发为独立项目,然后在顶层应用程序项目中一起组合,从而生成依赖关系树. 我以前成功地采用了这种方法
我以前成功地采用了这种方法,但这次有共享依赖(C)导致问题:
A /|\ / | \ B C D / \ \ C E C
其中A是顶级应用程序项目,C是函数的“核心库”.此核心库是A本身以及模块B和D的依赖项.由此产生的多重编译会导致构建文件夹中的重复符号并且链接失败.
现在,我可以务实,只是从A中删除引用,因为这将被B编译到构建文件夹中,如果不涉及D,这将起作用.但是我如何解决B和D中C依赖的重复?当我独立编译它们时,B和D项目仍然需要对C的引用,但是在A的上下文中编译两次时会发生冲突.
我可以想象一些使用objcopy并给它们唯一前缀的复杂解决方案,但这会有点效率低,因为它是相同的代码.我可以忍受这个,但有更好的方法吗?也许某些编译器或链接器标志重用构建文件夹中的现有符号(如果存在),而不是再次编译?
谢谢你的建议.
对我来说最有效的解决方案是在每个模块项目中有两个目标:< TargetName>我称之为< TargetName> -NoLink.这两个目标是相同的,只是在-NoLink中省略了链接阶段.因此,只创建了中间.o文件,构建可以一直进行到根项目,最终链接到所有模块.
链接目标< TargetName>仍然保留了在树中任何点链接所有依赖项的灵活性,为任何模块生成一个独立的.a文件.