虽然我开始使用 Ubuntu 已经快一年了,但我还没有尝试从源代码安装软件。我实际上并没有发现这样做的必要。但现在我正在开发一个软件,它在存储库中处于候选发布阶段,但最新的稳定版本的源代码可在软件主页上找到。
我了解到,如果软件有很多依赖项,从源代码安装可能会很困难。但是,如果我解决了这个问题,我会对最新版本感到满意。但我一直想知道这样的软件是否可以自动更新,或者我是否必须运行一些脚本来更新软件包。或者更糟糕的是,我必须从头开始重新安装每个更新?
此外,我很想知道除了上述之外,从源代码安装是否有任何特定优势。
最好注意软件的依赖关系很少改变。如果您已经成功编译过一次软件,那么任何后续版本都应该很容易编译 - 所有依赖项都应该已经满足。
如果您从源代码编译,则没有
.deb
可用于更新的软件包或类似的软件包,除非您等待发行版将该软件包含到他们的存储库中,或者等到开发人员的 PPA 更新。简单地说,必须有人先编译它才能使其成为 deb。编译旧版本不会让您能够自动更新,您仍然必须经历整个“下载-配置-编译-安装”过程。
但是
.deb
,如果您想在多台计算机上安装相同的版本,则将编译后的版本打包为(或类似的)并将其分发到这些计算机是有意义的。如果操作正确,依赖项将被自动拉入。至于从源代码安装的优点,我能想到的只有两个:
根据这篇文章,您可以在编译源代码后生成一个 .deb 包。然后,您可以从 .deb 包中安装,而不是“make install”。这使得更新更容易(如果它在某个存储库中),因为包将由跟踪更新的包管理器管理。
如果从源代码构建包“some-package”并且存在依赖项,您可以尝试“apt-get build-dep some-package”自动安装编译包所需的所有依赖项,而无需手动跟踪每个依赖自己。这样,依赖项也由包管理器管理,并且也应该自动更新。
git
值得一提的是用户的另一种选择:您还可以使用
git pull
after a earlygit clone
更新您的源代码,然后根据需要重新编译您的程序。(您还可以使用git
来进一步跟踪文件:请参阅此处的答案。)如果您最初用于
git clone
获取源代码,例如,并且您在编译和安装后保留了该文件夹,您可以 cd 到该文件夹并运行
git pull
以获取最新的提交。然后删除您可能创建和/或运行的任何构建目录make clean
(如果合适),然后再次编译软件并使用 安装它checkinstall
,这也会为您创建一个包(尽管不适合分发)。但是,如果您正在帮助开发程序并且需要在每天之后重新编译,
git pull
那么您可能会安装到主文件夹,因为没有必要/usr/local/
每次都安装到层次结构中。例如,如果我正在测试并定期重新编译一个程序,我会在获得最新提交
git pull
并运行(对于这个特定程序)后 cd 到我的构建文件夹:然后编译调试版本进行测试。
但是,如果您只是想每个月左右编译一个新版本的 git 克隆程序(并且没有测试或调试它),您通常会
/usr/local/
使用checkinstall
.要从源代码管理您的安装,请在此处查看我的答案:如何更新从源代码编译的软件包?