可能的代码针对系统/发行版提供的库。这使得在该发行版上发布产品变得最容易。
但是,如果你正在构建一个商业应用程序,因为有这么多的Linux发行版,这意味着你必须为每个发行版维护大量不同的应用程序版本。这不一定是坏事,因为这意味着你可以更干净地与发行版的包管理系统集成。
但是在不能这样做的情况下,应该很容易下载每个第三方依赖关系的源代码,并将该依赖关系的构建集成到与您的可执行文件链接的静态库中。这样你就可以确切地知道你连接的是什么,但是却有膨胀你的可执行文件大小的缺点。如果您需要发行版未提供的特定库(或版本),也可能需要此功能。
如果您希望您的代码构建在各种不同的Unix系统上,那么您可能会明智地考虑GNU autoconf和automake。这些帮助你为你的项目构建一个configure
脚本和makefile
,这样它就可以建立在任何Unix系统上。
另请参阅pkg-config,它现在在Linux发行版上使用很多,可以帮助您包含并链接到正确的库(用于支持pkg-config的库)。
如果你使用Subversion来管理你的来源有一个“惯例”,大多数颠覆仓库用来管理他们自己的代码和“供应商”的代码。
大多数svn软件仓库都有一个“供应商”树(随树干一起分支,树枝分支&)。这是所有第三方供应商代码的首选。在该目录中,您使用了每个库的目录。例如:
branches/
tags/
trunk/
vendor/somelib
vendor/anotherlib
下面的每个这些库的是每个库的版本和最先进的最新版本在你的仓库“当前”目录的目录。在这里
libs目录应该
主干/来源#所有的代码在这里 主干/林达#所有供应商代码:
vendor/somelib/1.0
vendor/somelib/1.1
vendor/somelib/current
那么你的项目的树应当设置是这样的为空,但它必须与它相关svn:externals
元数据,通过:
svn propedit svn:externals trunk/libs
此属性的内容是一些沿线的东西(假设颠覆1.5):
^/vendor/somelib/current somelib
^/vendor/anotherlib/1.0 anotherlib
这意味着,当你结帐代码颠覆还检查出你的供应商库到你的躯干/ libs目录。所以,当检查了它看起来像这样:
trunk/source
trunk/libs/somelib
trunk/libs/anotherlib
这在Subversion Book描述(可能是好多了)。特别是关于处理vendor branches和externals的部分。
来源
2008-10-22 09:15:49
orj