DESTDIR 和 PREFIX 的 make

Posted

技术标签:

【中文标题】DESTDIR 和 PREFIX 的 make【英文标题】:DESTDIR and PREFIX of make 【发布时间】:2012-07-03 16:21:19 【问题描述】:

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

    ./configure --prefix=*** make install DESTDIR=*** make install prefix=***

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

【问题讨论】:

【参考方案1】:

./configure --prefix=***

数字 1 决定了软件包在安装时的去向,以及在运行时查找相关文件的位置。如果您只是编译某些东西以在单个主机上使用,那么您应该使用它。


make install DESTDIR=***

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

./configure --prefix=/usr

所以程序在运行时预计会安装在/usr,然后

make install DESTDIR=debian/tmp

实际创建目录结构。


make install prefix=***

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

【讨论】:

不管怎样,在基于 cmake 的构建中,您可以通过在构建目录中运行 cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake 来模拟“案例 4”(用于存放等)。 @JackKelly:谢谢!我一直在将 DESTDIR 与 GNU stow 一起使用,并且通常必须使用 mv usr/local/* . && rmdir usr/local && rmdir usr 来修复目录结构——使用 prefix= 会好得多! 注意:部分软件不支持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。 再说明:DESTDIRprefix 可以在make install 上一起使用,即make install DESTDIR=/foo/bar/tmp perfix=/local 所以如果我运行./configure --prefix=path1 然后make install prefix=path2path2 覆盖path1,对吗? path1path2 之间还有其他区别吗?【参考方案2】:

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

使用 --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【参考方案3】:

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

【讨论】:

以上是关于DESTDIR 和 PREFIX 的 make的主要内容,如果未能解决你的问题,请参考以下文章

DESTDIR和PRE的PRE

使用自定义构建的 gcc(g++) 构建 c++ 项目

yumdownloader

CorelDRAW X8怎么破解正版

qt creator 构建、配置

优动漫paint1.6.2怎么破解