Effettuare l'installazione, ma non alle directory predefinite?


148

Voglio eseguire 'make install' in modo da avere tutto ciò di cui ho bisogno, ma mi piacerebbe che installasse le cose nella loro cartella invece del sistema / usr / bin ecc. È possibile? anche se fa riferimento a strumenti in / usr / bin ecc.?


3
Se è già stato costruito il progetto e si correva ./configure senza prefisso e si desidera installarlo in un percorso personalizzato, vedere stackoverflow.com/a/17679654/313113
Bitek

Risposte:


213

Dipende dal pacchetto. Se il Makefile è generato da GNU autotools ( ./configure) di solito puoi impostare la posizione di destinazione in questo modo:

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

Se il Makefile non è generato da autotools, ma distribuito insieme al software, è sufficiente aprirlo in un editor e modificarlo. La directory di destinazione dell'installazione è probabilmente definita da qualche parte in una variabile.


9
non dovresti make && make installseguire la clausola configure?
nass

1
Il problema che ho --prefixè che se in seguito esegui un stringsbinario risultante, vedi che il percorso è memorizzato all'interno. Non so perché questo accada, ma certamente non voglio i miei percorsi macchina su binari che invio ad altri utenti.
Erik Aigner,

Erik, sembra che ci saranno riferimenti al percorso che esegui in ogni caso, se costruisci dal sorgente.
Konstantin Rybakov,

44

Dato che non so quale versione di automake puoi usare la variabile d'ambiente DESTDIR .
Vedi Makefile per essere sicuro.

Per esempio:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install

9
Funziona quando hai eseguito la configurazione senza argomento della riga di comando --prefix e hai già creato il progetto ma non vuoi installarlo nelle posizioni predefinite ma invece specifica un percorso di installazione personalizzato. Questo aggiungerà il percorso usr / local / bin / predefinito al DESTDIR e il tuo progetto verrà installato in $ HOME / Software / LocalInstall / usr / local / bin /
bitek

Questa è una soluzione geniale. Non so perché questa non sia la risposta scelta! Quasi tutte le altre risposte chiedono di riconfigurare, il che significa che è necessario ripetere la ricostruzione. Immagina di aver compilato dopo 2 ~ 3 ore l'intero superbuild del MITK e poi di chiedermi di rifarlo, solo perché voglio installare i file compilati in una posizione diversa. Questo qui è un ottimo modo per evitare quella situazione.
Duck Dodgers,

23
make DESTDIR=./new/customized/path install

Questo comando rapido ha funzionato per me per l'installazione della versione 3.2.0 di opencv su Ubuntu 16. Il percorso DESTDIR può essere sia relativo che assoluto.

Tale reindirizzamento può anche essere utile nel caso in cui l'utente non disponga dei privilegi di amministratore purché la posizione di DESTDIR abbia il giusto accesso per l'utente. ad es. / home //


1
potrebbe anche essere necessario sostituire PREFIX se ha un valore predefinito all'interno del makefile
Mark Ch

17

Potrebbe dipendere da ciò che è supportato dal modulo che stai cercando di compilare. Se il tuo makefile viene generato usando gli autotools, usa:

--prefix=<myinstalldir>

quando si esegue ./configure

alcuni pacchetti consentono anche di eseguire l'override durante l'esecuzione:

make prefix=<myinstalldir>

tuttavia, se non si utilizza ./configure, l'unico modo per saperlo con certezza è aprire il makefile e controllare. Dovrebbe essere una delle prime variabili in alto.


3
dovresti anche essere consapevole del fatto che make prefix=...potrebbero verificarsi file binari con percorsi errati, dato che di solito non possono essere modificati dopo./configure --prefix=...
Tobias Kienzler,


0

Ho provato le soluzioni sopra. Nessuno ha funzionato.

Alla fine ho aperto il file Makefile e ho cambiato manualmente il percorso del prefisso nel percorso di installazione desiderato come di seguito.

PREFIX ?= "installation path"

Quando ho provato --prefix, "make" si è lamentato del fatto che non esiste un comando di questo tipo. Tuttavia, forse alcuni pacchetti accettano --prefix che è ovviamente una soluzione più pulita.


1
l' --prefixopzione è quella ./configureche chiami PRIMA make.
Gus

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.