如何在开源项目中引入外部库?

5

我创建了一个从Visual Studio运行的开源项目,但它也依赖于一些外部库才能正常工作。这些库也是开源的。我想知道的问题是,我应该

  1. 将用户指向这些库,并让他们下载源代码,然后将它们添加到项目中
  2. 将用户指向dll文件,并直接引用它
  3. 直接将dll文件包含在项目中
  4. 直接将这些库的源代码包含在项目中

哪种方式是最好或标准的做法?


感谢所有回答的人。基本上,答案都差不多,我会选择最快的回答者。 - sean
6个回答

3

有一些指南并非特定于开源,但我认为它们适用。

我总是包含所有外部库的二进制文件(除了像System.dll这样的标准库)在源代码控制中。这样,检查源代码的人可以立即构建项目。此外,我可以轻松切换到旧版本的项目,并立即拥有构建该修订版所使用的依赖项版本 - 这在调试旧版软件时特别有用。


1
我看过的大多数项目都包括一个ThirdParty文件夹(或类似的东西),其中包含项目中的dll文件,并且项目引用这些文件。这确保了每个人都有相同的版本,而且不需要更改引用。
如果它在版本控制中,如果您需要切换回早期版本,则也更容易进行调试。

1

(1) 对于下载您项目源代码的用户来说,这是可以接受的,假设依赖项列表不会失控,并且它们易于获取。

(2) 只要您引用的是其他人构建的二进制文件,那么基本上与(1)相同。我不会在自己的软件包之外构建和分发dll文件。

(3) 对于二进制分发,我会这样做,并包含每个依赖项,以便我的软件可以“开箱即用”。

(4) 除非出于某种原因需要分叉其他库(希望永远不会发生),否则不要这样做。

编辑:对于您自己的源代码控制,请随意选择最简单的方法。我的建议仅适用于您的分发(源和二进制)。将第三方库的源代码放入您自己的版本控制中,或者只放入头文件和二进制库 - 这在您的情况下哪种方式更好,都是很常见的。


0

我认为这取决于库的大小、可用性和波动性。

它们越大,你就越不想包含它们,而更想指向它们。

如果你的用户在获取它们方面可能会遇到更多问题,那么你就需要包含它们。在Sourceforge上的东西可能会一直存在,但在Joe的个人网站上的东西可能不会。

如果库有可能因更改而导致问题,你需要在项目中包含一个版本。

如果库有可能因改进而不破坏现有功能而发生更改,你需要指向它们。

至少,你应该提供DLL文件,除非它们太大,并标记它们的版本。

此外,请检查许可证。特别是在像GPL这样的copyleft许可下,你可能有义务确保所有源代码都可用。


你的意思是用版本标记它们吗?指定他们应该使用哪个版本? - sean
请注明您使用的版本。这样他们就能够确保构建与您提供的软件相同的版本。 - David Thornley

0

您可以将其设计得简单或复杂。作为用户,我更喜欢所有库都包含在产品的可下载分发中。这使得那些只想使用您的项目而不想麻烦的人们尽可能地简单。对于用户来说,下载外部库可能真的很困难(特别是在 .Net 世界中),给他们一个已知的良好依赖集合可以真正帮助他们。


0

你应该至少给他们两个选项:

  • 一个二进制下载,所有可执行文件和库(没有源代码)
  • 完整的源代码,用于您自己的代码(无外部库源代码)

除非您已修改了外部库,否则不应提供外部库的源代码,在这种情况下,您必须这样做。提供库源只会增加您可以获取源代码的各种位置,并增加对所获得版本的混淆。

当然,您应该提供到库主页的链接。如果您在发行GPL下发布程序,则还必须准备直接提供库源代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接