尽可能针对系统/发行版提供的库的代码。这使得在该发行版上发布产品变得最容易。
但是,如果您正在构建一个商业应用程序,因为 Linux 发行版的风格如此之多,这可能意味着您必须为每个发行版维护大量不同的应用程序构建。这不一定是坏事,因为这意味着您可以更干净地与发行版的包管理系统集成。
但是在你不能这样做的情况下,下载你拥有的每个 3rd 方依赖项的源代码并将该依赖项的构建集成到一个链接到你的可执行文件的静态库中应该是相当容易的。这样,您就可以确切地知道要链接的内容,但缺点是会增大可执行文件的大小。如果您需要发行版未提供的特定库(或版本),这也可能是必需的。
如果您希望您的代码构建在各种不同的 Unix 系统上,那么您可能明智地研究 GNU autoconf和automake。这些可以帮助您构建configure
脚本并makefile
为您的项目构建脚本,以便它可以构建在几乎任何 Unix 系统上。
还可以查看现在在 Linux 发行版上大量使用的pkg-config,以帮助您包含和链接到正确的库(对于支持 pkg-config 的库)。
如果您使用颠覆来管理您的源代码,那么大多数颠覆存储库都使用“约定”来管理自己的代码和“供应商”代码。
大多数 svn 存储库都有一个“供应商”树(与树干、分支和标签树一起)。这是所有 3rd 方供应商代码的顶部。在该目录中,您使用的每个库都有目录。例如:
branches/
tags/
trunk/
vendor/somelib
vendor/anotherlib
在每个库下面是每个库版本的目录和存储库中最新版本的“当前”目录。
vendor/somelib/1.0
vendor/somelib/1.1
vendor/somelib/current
然后你的项目的树应该像这样布置:
trunk/source #所有代码都在这里 trunk/libs #所有供应商代码都在这里
libs 目录应该是空的,但它会有svn:externals
与之关联的元数据,通过:
svn propedit svn:externals trunk/libs
该属性的内容类似于(假设颠覆 1.5):
^/vendor/somelib/current somelib
^/vendor/anotherlib/1.0 anotherlib
这意味着当您签出代码颠覆时,也会将您的供应商库签出到您的 trunk/libs 目录中。因此,当签出时,它看起来像这样:
trunk/source
trunk/libs/somelib
trunk/libs/anotherlib
这在Subversion Book中有描述(可能要好得多)。特别是关于处理供应商分支和外部的部分。