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