DESTDIR和PRE的PRE

问题描述 投票:99回答:3

我正在尝试将软件安装到特定目录。我找到了几种方法,但不确定它们之间有什么区别。

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

我对这三者的功能感到困惑。他们实现了同样的目标吗?

c linux bash makefile configure
3个回答
156
投票

./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安装二进制文件。


1
投票

这可以帮助说明使用DESTDIR--prefix(来自here):

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

在配置时为每个构建指定不同的--prefix location /选项。例如:

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

0
投票

来自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