使用 make install 更改安装目录

linuxopen sourceoperating system更新于 2026/1/27 4:37:17

概述

通常,软件包安装在默认目录中。根据系统的 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 变量。


相关文章


有用资源