关于开源:组织我的C项目代码及其外部库的最佳方法是什么?

关于开源:组织我的C项目代码及其外部库的最佳方法是什么?

What is the best way to organize my C project code and its external libraries?

我正在启动一个新的C项目,该项目主要基于OSS。它还将在SourceForge上,我想借此机会学习组织这种代码的既定最佳实践。我正在使用libcurl和libz之类的库,然后将使用MinGW和MSYS对其进行编译。

我将分发与我的Projet一起使用的所有库的源代码,因此下载源代码的人们不必费力去寻找依赖项。我应该将存储库的目录称为什么?到目前为止,我犹豫之间:

  • lib,因为它们是库。但是,\\'lib \\'在UNIX世界中具有不同的含义。
  • src,因为它们是源文件。
  • 3rdparty,因为我没有写。

这些库应该在哪里编译?我应该简单地配置它们并将其安装到系统根目录,还是应该建立一个所有库都应编译到的目录并从那里链接?显然,这将对我的Makefile产生影响。

我应该如何处理?是否有我应该遵循的既定惯例?他们写下来了吗?


在上一项工作中,标准是将它们安装在名为3rdparty的目录中,并在那里建立库(在3rdparty / LIBNAME / Debug等中)。


请不要在代码中附带第三方源代码,也不要将其静态链接到二进制文件中,也不要以任何其他方式。那只会干扰相同的其他副本,并且在库需要修复时不会被更新。一定要告诉用户要求是什么(并跟上库中的API更改!)。自编译用户将确保获取依赖关系,发行版将确保您的软件包与他们所发行的版本兼容。


我们使用带有_ext或_EXT后缀(即MyProject_EXT)的东西来表示它在我们的项目外部,以存储我们链接到的外部软件包的源代码。

我同意彼得的看法。外部库不应内置到系统根目录中,因为它们可能会引起冲突。我会在它们的目录中构建它们,然后将它们安装到您的应用程序所独有的/ lib目录(或者可能是/ extlib)中,并链接到那里。


首先,对于外部库,我将使用vendor,但这只是一个首选项。

第二,我认为在用户不知情的情况下,将其他库安装在系统根目录中并不是一个好主意。最重要的是,因为这将与这些库的更高版本安装冲突。因此,我认为这些库的最佳位置将与您的应用程序位于同一目录中。

您还可以将这些库静态编译到程序中。


推荐阅读