2012-07-03 12 views
77

Sto cercando di installare il software in una directory specifica. Ho trovato diversi modi, ma non sono sicuro di quali siano le differenze tra loro.DESTDIR e PREFIX di make

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

Sono confuso sulle funzioni di questi quattro. Raggiungono lo stesso obiettivo?

+0

Per il secondo, non sono nemmeno sicuro. Alcune pagine dicono "make install PREFIX", mentre altre dicono "make install prefix" e "make install --prefix". Non li ho ancora provati. – Sean

+2

È 'make install prefix = ...', vedere [Variabili per directory di installazione] (https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#Directory-Variables) – Ggicci

+0

Queste non sono costruito nel fare. Il primo ovviamente non ha nulla a che fare con make; il secondo non è valido; il terzo funziona solo se i makefile sono stati scritti per utilizzare DESTDIR. Alcuni makefile non supportano DESTDIR o utilizzano un nome diverso (come INSTALL_ROOT o INSTALL_PREFIX). – davmac

risposta

122

Il numero 1 determina dove verrà spostato il pacchetto quando viene installato e dove cercherà i file associati quando viene eseguito. È quello che dovresti usare se stai compilando qualcosa da usare su un singolo host.


Numero 2 è semplicemente un errore per quanto ne so.


Numero 3 è per l'installazione in una directory temporanea che non è dove il pacchetto sarà eseguito da. Ad esempio questo viene utilizzato quando si creano pacchetti deb. La persona che crea il pacchetto in realtà non installa tutto nella sua posizione finale sul proprio sistema. Potrebbe avere già installata una versione diversa e non voler disturbarla, oppure potrebbe non essere nemmeno root. Così egli utilizza

./configure --prefix=/usr 

in modo che il programma si aspetta di essere installato in /usr quando viene eseguito, quindi

make install DESTDIR=debian/tmp 

per creare effettivamente la struttura della directory.


Numero 4 sta per installarlo in un luogo diverso, ma non creare tutte le directory come DESTDIR=/foo/bar/baz avrebbe fatto. E 'comunemente usato con GNU Stow via

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

, che sarebbe installare i binari in /usr/local/stow/foo/bin. Per confronto,

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

installa i binari in /usr/local/stow/foo/usr/local/bin. Questo è probabilmente quello che doveva essere lo numero 2.

+38

Ottima risposta.C'è un quarto caso a cui non viene chiesto: 'make install prefix =/foo/bar/baz'. Lo installerà in un posto diverso ma non creerà tutte le directory come farebbe 'DESTDIR =/foo/bar/baz'. Viene comunemente usato con GNU stow tramite './configure --prefix =/usr/local && make && sudo make install prefix =/usr/local/stow/foo', che installa i binari in/usr/local/stow/foo/bin'. ('make install DESTDIR =/usr/local/stow/foo', in confronto, installerebbe i binari in/usr/local/stow/foo/usr/local/bin'.) –

+6

Per quello che vale, in un cmake -based build è possibile emulare "case 4" (per stow, ecc.) eseguendo 'cmake -DCMAKE_INSTALL_PREFIX =/foo/bar/baz -P cmake_install.cmake' nella directory di build. –

+0

@JackKelly: Grazie! Ho usato DESTDIR con GNU stow e ho dovuto sistemare la struttura delle directory con un 'mv usr/local/*. && rmdir usr/local && rmdir usr' in genere - l'uso di 'prefix =' è molto meglio! –