¿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.


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.


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

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 //


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.


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.


1
la --prefixopción es a la ./configureque llamas ANTES make.
Gus

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.