如何管理外部库和内部库的依赖项版本? 我们正在开发一个C++项目,内部模块化为单独的存储库。 这个项目还依赖于外部依赖:一些是开源的(我们为其构建了二进制文件),一些是封闭的(我们为其获取了预构建的二进制文件)

如何管理外部库和内部库的依赖项版本? 我们正在开发一个C++项目,内部模块化为单独的存储库。 这个项目还依赖于外部依赖:一些是开源的(我们为其构建了二进制文件),一些是封闭的(我们为其获取了预构建的二进制文件),c++,version-control,dependencies,dependency-management,C++,Version Control,Dependencies,Dependency Management,发布新提交供其他人使用时,一个关键方面不是简单地列出依赖项,而是能够指定依赖项的预期版本: 对于第三方库,它将是一个版本号(可能会应用补丁) 对于内部依赖项,理想情况下它是一个提交id或标记 我们正在寻找一种现有的工具(或方法)来管理依赖关系及其版本,理想情况下解决内部和第三方依赖关系 理想情况下,此解决方案的结构使其既可供开发人员使用,也可供自动化流程使用(考虑到持续集成,确保实际构建了一个集成分支)。源依赖项的常见解决方案是使用git子模块,svn:external或mercurial子

发布新提交供其他人使用时,一个关键方面不是简单地列出依赖项,而是能够指定依赖项的预期版本:

  • 对于第三方库,它将是一个版本号(可能会应用补丁)
  • 对于内部依赖项,理想情况下它是一个提交id或标记
我们正在寻找一种现有的工具(或方法)来管理依赖关系及其版本,理想情况下解决内部和第三方依赖关系


理想情况下,此解决方案的结构使其既可供开发人员使用,也可供自动化流程使用(考虑到持续集成,确保实际构建了一个集成分支)。

源依赖项的常见解决方案是使用git子模块,svn:externalmercurial子存储库取决于您的源代码管理

根据我的经验,使用Team Foundation服务器不可能做到这一点。 对于二进制文件,我过去在Makefiles中有一个自定义目标,用于从共享文件夹或其他任何地方复制依赖项


这些目标可以很容易地从CI调用,就像您在本地开发机器上所做的那样。

谢谢您的建议。我们已经将git子模块用于不同的目的,我们认为它不适合解决当前的问题。特别是,git子模块坚持在父项目repo中检索子模块repo的本地副本(这并不总是我们想要的,特别是在开发人员的机器上)。另外,它不会干净地处理第三方库,这需要在项目文件中单独维护(在您的示例中是Makefile)。是的,我知道。我们在我以前的公司也有类似的问题。您可以作为第三方管理几乎所有内容,通过夜间构建或按需构建将您的构建推到与第三方相同的共享资源上,您也可以作为第三方管理所有内容。不久前,我一直在寻找解决方案,但没有找到任何相关的解决方案。