DESTDIR 和 make 的前缀

我试图让软件安装到一个特定的目录。我找到了几种方法,但不确定它们之间有什么区别。

  1. ./configure --prefix=***
  2. make install DESTDIR=***
  3. make install prefix=***

我对这三者的作用感到困惑,它们是否达到了同样的目的?

107923 次浏览

./configure --prefix=***

编号1 决定了安装包时将去哪里,以及运行包时将去哪里查找相关文件。如果只是为了在单个主机上使用而编译某些内容,那么就应该使用它。


make install DESTDIR=***

编号2 用于安装到一个临时目录,该目录不是运行包的位置。例如,这在构建 deb包时使用。构建包的人实际上并没有将所有东西都安装到他自己系统的最终位置。他可能已经安装了不同的版本,并且不想干扰它,或者他甚至不是 root 用户。所以他吸毒

./configure --prefix=/usr

所以程序在运行时应该安装在 /usr

make install DESTDIR=debian/tmp

来实际创建目录结构。


make install prefix=***

编号3 将把它安装到一个不同的位置,但不会像 DESTDIR=/foo/bar/baz那样创建所有的目录。它通常与 GNU stow via 一起使用

./configure --prefix=/usr/local && make && sudo make install prefix=/usr/local/stow/foo

,它将在 /usr/local/stow/foo/bin中安装二进制文件。相比之下,

make install DESTDIR=/usr/local/stow/foo

将在 /usr/local/stow/foo/usr/local/bin中安装二进制文件。

这有助于说明 DESTDIR--prefix(来自 给你)的用法:

使用—— prefix 和 DESTDIR 进行多次安装:

在配置时为每个构建指定一个不同的——前缀位置/选项。例如:

untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-mpich --with-mpi-dir=/opt/mpich
make
make install DESTDIR=/tmp/petsc-pkg
untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-openmpi --with-mpi-dir=/opt/openmpi
make
make install DESTDIR=/tmp/petsc-pkg

来自 openssl/INSTALL

希望将库配置为标准的包生成器 但将软件包安装在其他地方,以便 它可以很容易地包装,可以使用

$ make INSTALL_PREFIX=/tmp/package-root install

(或指定“—— install _ prefix =/tmp/package-root”作为配置 选项)。指定的前缀将预先对所有 安装目标文件名。

这是非标准的,但 INSTALL _ PREFIX 在其他一些程序中使用。

这适用于1.1.x 之前的 OpenSSL 版本。 OpenSSL 1.1.x 和更高版本能够识别通常的 DESTDIR