script make fichero existe directorio create c linux bash makefile configure

make - DESTDIR y PREFIX de hacer



makefile c++ (2)

Estoy tratando de hacer que el software se instale 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 --prefix=***
  3. make install DESTDIR=***
  4. make install prefix=***

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


Esto puede ayudar a ilustrar el uso de DESTDIR y --prefix (desde here ):

Múltiples instalaciones usando --prefix y DESTDIR:

Sepcifique 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


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

El número 2 es simplemente un error hasta donde yo sé.

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

./configure --prefix=/usr

entonces el programa esperará instalarse en /usr cuando se ejecute, luego

make install DESTDIR=debian/tmp

para realmente crear la estructura del directorio.

El número 4 lo instalará en un lugar diferente pero no creará todos los directorios como lo DESTDIR=/foo/bar/baz . Se usa comúnmente con GNU stow via

./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 . Eso es probablemente lo que realmente se suponía que era el número 2 .