¿Hacer la instalación, pero no a los directorios predeterminados?

148

Quiero ejecutar 'make install' para tener todo lo que necesito, pero me gustaría instalar las cosas en su propia carpeta en lugar de / usr / bin del sistema, etc. ¿es eso posible? incluso si hace referencia a herramientas en / usr / bin, etc.

Jon Phenow
fuente
3
Si ya compiló el proyecto y ejecutó ./configure sin prefijo y desea instalarlo en una ruta personalizada, consulte stackoverflow.com/a/17679654/313113
bitek

Respuestas:

213

Depende del paquete. Si el Makefile es generado por GNU autotools ( ./configure), generalmente puede establecer la ubicación de destino de la siguiente manera:

./configure --prefix=/somewhere/else/than/usr/local

Si el Makefile no es generado por autotools, sino distribuido junto con el software, simplemente ábralo en un editor y cámbielo. El directorio de destino de la instalación probablemente esté definido en una variable en alguna parte.

Thomas
fuente
9
no debería make && make installseguir la cláusula de configuración?
nass
1
El problema que tengo --prefixes que si ejecuta un stringsbinario resultante después, verá que la ruta está almacenada en su interior. No sé por qué sucede esto, pero ciertamente no quiero las rutas de mi máquina en los archivos binarios que envío a otros usuarios.
Erik Aigner
Erik, parece que habrá referencias a la ruta que ejecutas de todos modos, si construyes desde la fuente.
Konstantin Rybakov
44

Como no sabe qué versión de automake puede usar la variable de entorno DESTDIR .
Ver Makefile para estar seguro.

Por ejemplo:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install
Andor
fuente
9
Esto funciona cuando ejecutó configure sin el argumento de línea de comando --prefix y ya compiló el proyecto pero no desea instalarlo en las ubicaciones predeterminadas, sino que especifica una ruta de instalación personalizada. Esto agregará el usr / local / bin / path predeterminado al DESTDIR y su proyecto se instalará en $ HOME / Software / LocalInstall / usr / local / bin /
bitek
Esta es una solución brillante. ¡No sé por qué esta no es la respuesta elegida! Casi todas las otras respuestas piden reconfigurar, lo que significa que también hay que volver a configurar. Imagina haber compilado después de 2 ~ 3 horas toda la superconstrucción MITK y luego se te pedirá que lo vuelvas a hacer, solo porque quiero instalar los archivos compilados en una ubicación diferente. Este es un trabajo maravilloso para evitar esa situación.
Duck Dodgers
23
make DESTDIR=./new/customized/path install

Este comando rápido funcionó para mí para la instalación de opencv versión 3.2.0 en Ubuntu 16. La ruta DESTDIR puede ser relativa o absoluta.

Dicha redirección también puede ser útil en caso de que el usuario no tenga privilegios de administrador, siempre que la ubicación DESTDIR tenga acceso correcto para el usuario. por ejemplo / home //

samasat
fuente
1
también podría ser necesario anular PREFIJO si tiene un valor predeterminado dentro del archivo MAKE
Mark Ch
17

Podría depender de lo que admite el módulo que está intentando compilar. Si su archivo MAKE se genera usando autotools, use:

--prefix=<myinstalldir>

cuando ejecuta el ./configure

algunos paquetes le permiten anular también cuando se ejecuta:

make prefix=<myinstalldir>

sin embargo, si no está usando ./configure, la única forma de saberlo con certeza es abrir el archivo MAKE y verificar. Debería ser una de las primeras variables en la parte superior.

Tree77
fuente
3
también debe tener en cuenta que make prefix=...puede dar como resultado archivos binarios con rutas codificadas incorrectamente, ya que generalmente no se pueden modificar después de./configure --prefix=...
Tobias Kienzler el
0

Probé las soluciones anteriores. Ninguno funcionó.

Al final, abrí el archivo Makefile y cambié manualmente la ruta del prefijo a la ruta de instalación deseada como se muestra a continuación.

PREFIX ?= "installation path"

Cuando intenté --prefix, "make" se quejó de que no hay tal entrada de comando. Sin embargo, quizás algunos paquetes acepten --prefix, que por supuesto es una solución más limpia.

Majid Azimi
fuente
1
la --prefixopción es a la ./configureque llamas ANTES make.
Gus
-7

intente usar INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Christopher
fuente
11
No sugiera que las personas "intenten" algo sin ninguna información que lo corrobore.
RichieHH
Esto debería ser un comentario.
EJoshuaS - Restablece a Mónica el