如何更新从源构建的程序

时间:2016-06-18 10:04:47

标签: linux makefile archlinux

你能告诉我如何更新用“sudo make install”安装的程序。 我问我是否必须卸载程序,然后重做“./autogen.sh”“make”“sudo make install”。有人说我需要删除程序,然后在git pull之后再次构建它,其他人说我可以使用更新的源代码重新安装它。

3 个答案:

答案 0 :(得分:1)

这取决于。如果只是轻微更新,只需重新编译并make install

如果提供的库和/或头文件有任何更改(例如,它们已重命名),则最好先卸载软件,以清除文件系统中不需要的文件。

答案 1 :(得分:1)

真的很难卸载您自己安装在默认位置的程序。如果你很幸运,uninstall会有deinstallmake目标,但大部分时间都没有。这可能是手动搜索文件并删除它们的问题,除非你再次重新安装相同版本的代码并以某种方式关注事物实际结束的地方(这只会使“追捕”位稍微容易)

将来,您可以选择以不同方式做事: 大多数使用GNU configure脚本的源代码分发允许您使用--prefix=path为安装指定前缀。这允许您在单独的子目录中进行安装,然后这将很容易删除。

例如,假设我正在安装一个虚构的软件,名为ThePackage,版本14.4:

$ ./configure --prefix=/usr/local/stow/thepackage-14.4
$ make && sudo make install

(我通常使用$HOME/local/stow下的路径

注意那里的stow?没有巧合,有一个简洁的实用工具,正是这个,available from the GNU people

安装上述软件后,在.../stow/thepackage-14.4下,只需

即可
$ cd /usr/local/stow
$ sudo stow -v thepackage-14.4

这会使用符号链接填充/usr/local,例如/usr/local/stow/thepackage-14.4/bin中的/usr/local/bin中的任何可执行文件都可用

要卸载:

$ cd /usr/local/stow
$ sudo stow -D -v thepackage-14.4
$ sudo rm -rf thepackage-14.4

这甚至允许您在/usr/local/stow下安装多个版本的某些软件。要“激活”某个特定版本,只需stow -D您正在使用的任何版本,stow您要测试的版本。如果新版本没有按照您的要求执行,请撤消操作。

也可以使其他构建系统在单独的前缀下安装。例如,要按上述方式进行CMake安装,请使用

$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/stow/thepackage-14.4
$ make && sudo make install

您还可以将stow与Perl软件包一起使用,以及在可自定义路径中安装的任何其他软件包。

答案 2 :(得分:0)

(通常)没有make uninstall

这就是为什么我总是将这样的软件安装到一个单独的目录中,以软件及其版本号命名。例如,从源代码安装GNU Make 4.1时,我会将其安装到目录make-4.1

然后我将所有相关文件符号链接到我在$PATH$MANPATH等中使用的公共目录树中。我使用自己的脚本来做到这一点,但那只是因为我写作时我不知道stow

这允许我并排安装多个版本,并通过删除和添加我的脚本中的符号链接来选择“当前”版本。我只需删除其目录树即可卸载软件。

这也适用于需要以这种方式安装的依赖项的软件。最难的部分是决定是否依赖于特定于版本的版本。