DESTDIR y PREFIX of make


119

Estoy intentando instalar el software en un directorio específico. Encontré varias formas, pero no estoy seguro de cuáles son las diferencias entre ellas.

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

Estoy confundido acerca de las funciones de estos tres. ¿Logran el mismo objetivo?

Respuestas:


185

./configure --prefix=***

El número 1 determina dónde irá el paquete cuando se instale y dónde buscará sus archivos asociados cuando se ejecute. Es lo que debe usar si solo está compilando algo para usar en un solo host.


make install DESTDIR=***

El número 2 es para instalar en un directorio temporal que no es desde donde se ejecutará el paquete. Por ejemplo, esto se usa al crear debpaquetes. La persona que crea el paquete en realidad no instala todo en su lugar final en su propio sistema. Puede que ya tenga instalada una versión diferente y no quiera alterarla, o puede que ni siquiera sea root. Entonces usa

./configure --prefix=/usr

por lo que el programa esperará ser instalado /usrcuando se ejecute, luego

make install DESTDIR=debian/tmp

para crear realmente la estructura de directorios.


make install prefix=***

Número 3 lo instalará en un lugar diferente, pero no creará todos los directorios como lo DESTDIR=/foo/bar/bazharía. Se usa comúnmente con GNU stow a través de

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

, que instalaría binarios en /usr/local/stow/foo/bin. En comparación,

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

instalaría binarios en /usr/local/stow/foo/usr/local/bin.


8
Por si sirve de algo, en una compilación basada en cmake puede emular el "caso 4" (para guardar, etc.) ejecutándolo cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakeen el directorio de compilación.
Ryan Pavlik

@JackKelly: ¡Gracias! He estado usando DESTDIR con GNU stow y he tenido que arreglar la estructura del directorio con un mv usr/local/* . && rmdir usr/local && rmdir usrtípico - ¡usar prefix=es mucho mejor!
thinkski

Nota: algunos programas no son compatibles DESTDIR=/tmp/foo make install; para proyectos basados ​​en cmake, tuve más suerte con el cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeque se instala /tmp/foo/{bin,...}; consulte github.com/opencv/opencv/issues/11833#issuecomment-401164056 para ver un ejemplo.
timotheecour

Una nota más: DESTDIRy prefixse pueden usar make installjuntos, es decir make install DESTDIR=/foo/bar/tmp perfix=/local.
albert

1

Esto puede ayudar a ilustrar el uso de DESTDIRy --prefix(desde aquí ):

Varias instalaciones utilizando --prefix y DESTDIR:

Separar una ubicación / opción de prefijo diferente para cada compilación en el momento de la configuración. Por ejemplo:

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

En caso de que no se proporcione el archivo ./configure, aún se puede instalar en el directorio específico del usuario usando: make prefix = / path / to / your / lib / libaio install
Good Will

0

De openssl/INSTALL

Los creadores de paquetes que desean configurar la biblioteca para ubicaciones estándar, pero tienen el paquete instalado en otro lugar para que pueda empaquetarse fácilmente, pueden usar

$ make INSTALL_PREFIX=/tmp/package-root install

(o especifique "--install_prefix = / tmp / package-root" como una opción de configuración). El prefijo especificado se antepondrá a todos los nombres de archivo de destino de la instalación.

Esto no es estándar, pero INSTALL_PREFIX se usa en algunos otros programas.

Esto funciona para versiones de OpenSSL anteriores a 1.1.x. OpenSSL 1.1.xy posteriores pueden reconocer los archivos DESTDIR.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.