使用 make install 更改安装目录
概述
通常,软件包安装在默认目录中。根据系统的 Linux 版本,可能需要使用其他目录,例如 /usr 或 /user/local。我们可能还想为单个用户而不是整个系统安装特定的软件应用程序。
我们将了解如何通过运行 make uninstall 来更改软件包的安装位置。
使用 ./configure 参数
使用 autoconf/automake 构建软件包时,会提供一个 configure 脚本,其中包含一些标准参数以及(有时)额外的自定义参数。有些软件包不使用 autoconf,但它们通常提供兼容的 ./configure 脚本。
我们可以使用参数指定 make 在运行 ./configue 时将创建的目录。
–prefix=<dir> − 默认情况下,通常是 /usr 或 usr/local,它是用于其他设置的目录。
–libdir=<dir> − 这是库目录,默认情况下通常为 ${prefix}/lib 或 ${prefix}/lib64
–bindir=<dir> − 这是可执行文件目录,默认情况下通常为 ${prefix}/bin
通过默认情况下,prefix 参数用于 lib 和 bin 目录。我们可以使用 prefix 参数来指定程序的安装位置。
当我们想要确保包遵循我们自定义的结构时,可以使用 GNU 的 diffutil 包作为示例。它默认安装到 /usr/lib。我们将 prefix 设置为 /usr,将 libdir 设置为 /usr/lib64 -
$ ./configure --prefix=/usr --libdir=/usr/lib64
由于我们没有指定 bindir,因此它默认为 /usr/bin,因为我们指定了 prefix /usr。prefix 参数不适用于我们未明确设置的目录。
运行 make install 后,diffutil 包将安装到所需的位置。我们将安装到 /usr,因此需要 root 权限。
$ make install $ ls -l /usr/bin/diff -rwxr-xr-x 1 root root 1078184 Jun 6 11:21 diff
您还可以更改安装目录,使其安装到您自己的个人文件夹而不是系统文件夹中。这样,您就无需 root 权限即可运行安装程序。
我们首先使用 make clean 清理安装目录,然后将其配置为安装到 /home/tpoint/diffutils/usr −
$ make clean $ ./configure --prefix=/home/tpoint/diffutils/usr
当我们更改前缀时,其他参数(例如 libdir 和 bindir)将使用 /home/user/diffutil/usr 作为基目录。
使用 DESTDIR
当我们运行 ./configue 时,我们正在更改构建和安装过程,因此安装的文件将使用这些路径。例如,应用程序可能需要安装图标、声音文件等资源,并且必须能够找到它们。让我们使用 --prefix=/path/to/dir 在安装 diffutils 的目录中查找前缀。
$ strings /home/tpoint/diffutils/usr/bin/diff | grep /home/tpoint/diffutils/usr /home/tpoint/diffutils/usr/share/locale
我们可以看到,在刚刚下载的二进制文件的 /home/user/bin/diffutils/usr 路径下找到了字符串。如果我们不将新版本安装在其他位置,那就没问题了。
有时我们只想将程序安装到另一个位置,而不更改其内部文件夹结构。
例如,我们想要创建已安装程序的 tarball,然后将其复制到另一台计算机。如果发生这种情况,我们通常会先将软件包安装到一个空的临时目录中。因此,软件包不需要提及这个临时地址。
为了正确执行,我们将在运行 make install 时使用 DESTDIR=<dir> 环境变量。此路径将被添加到所有安装目录中。我们将通过删除当前安装并使用 DESTDIR 重新安装来从系统中卸载 diffutils。
$ rm -r /home/tpoint/diffutils $ make clean $ ./configure --prefix=/usr $ make $ make DESTDIR=/home/tpoint/diffutils install
Make 将使用 /home/tpoint/diffutils 作为其安装位置。我们已将 DiffUtils 配置为使用 /usr 作为其默认目录。结果如下 -
$ ls -l /home/tpoint/diffutils/usr/bin total 1740 -rwxr-xr-x 1 tpoint users 191456 Jun 6 12:48 cmp -rwxr-xr-x 1 tpoint users 1078184 Jun 6 12:48 diff -rwxr-xr-x 1 tpoint users 300552 Jun 6 12:48 diff3 -rwxr-xr-x 1 tpoint users 204376 Jun 6 12:48 sdiff $ strings /home/tpoint/diffutils/usr/bin/diff | /home/tpoint/diffutils
如我们所见,我们将软件包安装在 /home/tpoint/diffutils 中。这次,没有引用 DESTDIR 指定的目录。
使用 Makefile 参数
如果软件包不包含 ./configure 文件,它可能会提供一个遵循 GNU 约定的 makefile。在这种情况下,可以遵循 ./configure 使用的参数。
如果我们想使用 make 设置变量,我们将使用参数 variable=value。我们将前缀更改为 /usr,将 libdir 更改为 /usr/lib64 −
$ make clean $ make prefix=/usr libdir=/usr/lib64 $ make prefix=/usr libdir=/usr/lib64 install
我们需要重新编译软件包,然后使用相同的配置再次安装它。
Makefile 中的变量将使用 ./configure 约定进行设置,前缀变量将用作其他选项的基准位置。
现在我们可以像之前使用 PREFIX 一样使用 DESTDIR。这样做可以让我们将软件包安装在任何位置,而无需更改其结构。这次我们使用 prefix=/usr/local,并添加 DESTDIR 以在 /home/tpoint/diffutils 中安装 diffutils -
$ rm -r /home/tpoint/diffutils $ make clean $ make prefix=/usr/local $ make prefix=/usr/local DESTDIR=/home/tpoint/diffutils install
首先,我们删除目标文件夹,以防上次安装时存在该应用程序的旧副本。让我们看看结果 -
$ ls -l /home/tpoint/diffutils/usr/local/bin total 1740 -rwxr-xr-x 1 tpoint users 191456 Jun 6 22:59 cmp -rwxr-xr-x 1 tpoint users 1078184 Jun 6 22:59 diff -rwxr-xr-x 1 tpoint users 300552 Jun 6 22:59 diff3 -rwxr-xr-x 1 tpoint users 204376 Jun 6 22:59 sdiff $ strings /home/tpoint/diffutils/usr/local/bin/diff | /home/tpoint/diffutils
我们使用路径 /usr/local 将 diffutilis 安装在 /home/baeldung/diffutils 中。二进制文件中没有 DESTDIR 目录的跟踪文件。
只有 DESTDIR 是大写的,而 PREFIX、LIBDIR 等都是小写的。
当软件包提供 ./configure 脚本时,我们也可以使用 Makefile 的环境变量。如果您使用 ./configure,则 make 变量将优先于任何 configure 参数。
结论
我们学习了如何在使用 make install 安装软件包时设置安装位置。
最初,我们尝试执行 ./configure 命令,然后切换目录。如果没有 ./configure,我们可以编辑 makefile 变量。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

