DESTDIR和PRE的PRE

Sea*_*ean 109 c linux bash makefile configure

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

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

我对这四个的功能感到困惑.他们实现了同样的目标吗?

Ala*_*rry 164

数字1确定程序包安装时的位置,以及程序运行时查找其关联文件的位置.如果您只是编译在单个主机上使用的东西,那么您应该使用它.


据我所知,2号只是一个错误.


编号3用于安装到临时目录,该目录不是运行包的位置.例如,在构建./configure --prefix=***包时使用它.构建软件包的人实际上并没有将所有内容安装到自己系统的最终位置.他可能已经安装了不同的版本并且不想打扰它,或者他甚至可能不是root用户.所以他用

./configure --prefix=/usr
Run Code Online (Sandbox Code Playgroud)

因此程序将在make install DESTDIR=***运行时安装

make install DESTDIR=debian/tmp
Run Code Online (Sandbox Code Playgroud)

实际创建目录结构.


4号将把它安装到不同的地方,但不会创建所有目录deb.它通常用于GNU stow via

./configure --prefix=/usr/local && make && sudo make install prefix=/usr/local/stow/foo
Run Code Online (Sandbox Code Playgroud)

,将安装二进制文件/usr.通过比较,

make install DESTDIR=/usr/local/stow/foo
Run Code Online (Sandbox Code Playgroud)

将安装二进制文件make install prefix=***.这可能是2号真正应该是的.

  • 对于它的价值,在基于cmake的构建中,您可以通过在构建目录中运行`cmake -DCMAKE_INSTALL_PREFIX =/foo/bar/baz -P cmake_install.cmake`来模拟"案例4"(用于存储等). (7认同)
  • 再注意一点:`DESTDIR`和`prefix`可以一起用于`make install`,即`make install DESTDIR=/foo/bar/tmp perfix=/local`。 (2认同)
  • 因此,如果我运行“./configure --prefix=path1”,然后运行“make install prefix=path2”,“path2”会覆盖“path1”,对吧?`path1` 和 `path2` 之间还有其他区别吗? (2认同)