make的DESTDIR和PREFIX


118

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

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

我对这三个功能感到困惑。他们是否达到了相同的目标?

Answers:


184

./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存放通过

./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


8
对于它的价值,在基于cmake的构建中,您可以通过cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake在build目录中运行来模拟“案例4”(用于存储等)。
Ryan Pavlik 2012年

@JackKelly:谢谢!我一直在使用DESTDIR和GNU stow,并且不得不用一种mv usr/local/* . && rmdir usr/local && rmdir usr典型的方式来修复目录结构-使用起来prefix=要好得多!
thinkski 2014年

注意:某些软件不支持DESTDIR=/tmp/foo make install;对于基于cmake的项目,我可以运气cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmake更好 /tmp/foo/{bin,...};有关示例,请参见github.com/opencv/opencv/issues/11833#issuecomment-401164056
timotheecour

另外请注意:DESTDIRprefix可以一起使用make install,即make install DESTDIR=/foo/bar/tmp perfix=/local
艾伯特

1

这可以帮助说明DESTDIRand --prefix(从此处开始)的用法:

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

在配置时,为每个版本分隔一个不同的--prefix位置/选项。例如:

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

如果未提供./configure文件,则仍可以使用以下命令安装到用户特定的目录:make prefix = / path / to / your / lib / libaio install
Good Will

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.