我应该如何管理C或C ++开源项目中的依赖项?

时间:2011-05-28 23:18:16

标签: c++ c

我有一些开源应用程序。这些依赖于一些第三方组件,特别是Crypto ++和Boost。有几种选择:

  • 将第三方代码放入版本控制中,并将其包含在我的代码分发中。一方面,这是最容易使用的人,因为他们可以直接从我的源代码控制库中编译。另一方面,他们可能正在浪费他们已经拥有的带宽下载源,或者最终不得不与我的库进行斗争才能删除第三方位。此外,源代码管理工具通常无法处理像Boost这样的大型库。
  • 根本不包含第三方代码。这迫使人们竭尽全力使用我的图书馆。另一方面,这意味着我的源代码控制存储库和发行版将很小。
  • 我尚未预料到的东西。

我该怎么办?

注意:我不在可依赖aptitudeapt-getyum等依赖关系映射器的环境中工作。

4 个答案:

答案 0 :(得分:7)

选项3:不要将其包含在代码分发中,而是包含(链接到a)下载,该下载应与您支持的最新版本匹配。
此外,明确列出您的依赖项和您支持的最新版本。

这允许用户按照自己的意愿行事。想要你的代码有依赖吗?从一个来源加载。只想要部分依赖项,因为你拥有其他依赖项?加载部分内容。只想要你的代码吗?单独加载它。

选项4:提供2个版本,一个包括依赖项,另一个版本没有,但与上面的选项3相结合。

答案 1 :(得分:2)

我建议Autoconf旨在将这些担忧从你身上抽走。

我怀疑您是否可以在所有平台上维护所有依赖项的构建脚本。在您的svn中保留第三方代码的另一个问题是,现在您还需要跟踪它们的依赖关系等等。

答案 2 :(得分:1)

我认为在SVN中拥有依赖关系是一个好主意。这样开发人员可以简单地签出和编译。此外,您还可以避免使用不同的依赖项不兼容版本的问题。

如果您将依赖项放在一个单独的文件夹中,那么开发人员可以选择不签出您的依赖项,如果他们有这些依赖项...

答案 3 :(得分:0)

如果您有一个好的包管理器,那么我肯定不会在您的存储库中包含依赖项。如果列出依赖项,那么编译它的人应该很容易从repos中获取它们。

如果您愿意,可以将所有依赖项作为附加下载包含在内。但是将它们与你工作的代码混合起来通常不是一个好主意。