DESTDIR e PREFIX di marca


119

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.

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

Sono confuso riguardo alle funzioni di questi tre. Raggiungono lo stesso obiettivo?

Risposte:


185

./configure --prefix=***

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


make install DESTDIR=***

Il numero 2 serve per l'installazione in una directory temporanea che non è quella da cui verrà eseguito il pacchetto. Ad esempio, viene utilizzato durante la creazione di debpacchetti. 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 volerla disturbare, oppure potrebbe non essere nemmeno root. Quindi usa

./configure --prefix=/usr

quindi il programma si aspetterà di essere installato /usrquando verrà eseguito

make install DESTDIR=debian/tmp

per creare effettivamente la struttura della directory.


make install prefix=***

Il numero 3 lo installerà in un posto diverso ma non creerà tutte le directory come DESTDIR=/foo/bar/bazfarebbe. È comunemente usato con GNU stow via

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

, che installerebbe i binari in /usr/local/stow/foo/bin. A confronto,

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

installerebbe i binari in /usr/local/stow/foo/usr/local/bin.


8
Per quel che vale, in una build basata su cmake puoi emulare il "caso 4" (per stow, ecc.) Eseguendolo cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakenella directory build.
Ryan Pavlik

@JackKelly: grazie! Ho usato DESTDIR con GNU stow e ho dovuto aggiustare la struttura delle directory con un mv usr/local/* . && rmdir usr/local && rmdir usrtipico - usare prefix=è molto meglio!
thinkski

Nota: alcuni software non supportano DESTDIR=/tmp/foo make install; per i progetti basati su cmake, ho avuto più fortuna con cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakequali installazioni /tmp/foo/{bin,...}; vedi github.com/opencv/opencv/issues/11833#issuecomment-401164056 per un esempio.
timotheecour

Un'altra nota: DESTDIRe prefixpossono essere usati make installinsieme, ad es make install DESTDIR=/foo/bar/tmp perfix=/local.
albert

1

Questo può aiutare a illustrare l'uso di DESTDIRe --prefix(da qui ):

Installazioni multiple utilizzando --prefix e DESTDIR:

Sepcify una diversa posizione / opzione --prefix per ogni build - al momento della configurazione. Ad esempio:

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

Nel caso in cui il file ./configure non venga fornito, è comunque possibile eseguire l'installazione nella directory specifica dell'utente utilizzando: make prefix = / path / to / your / lib / libaio install
Good Will

0

A partire dal openssl/INSTALL

I costruttori di pacchetti che desiderano configurare la libreria per posizioni standard, ma hanno il pacchetto installato da qualche altra parte in modo che possa essere facilmente impacchettato, possono utilizzare

$ make INSTALL_PREFIX=/tmp/package-root install

(o specificare "--install_prefix = / tmp / package-root" come opzione di configurazione). Il prefisso specificato verrà anteposto a tutti i nomi di file di destinazione dell'installazione.

Questo non è standard ma INSTALL_PREFIX è utilizzato in alcuni altri programmi.

Funziona per le versioni di OpenSSL precedenti alla 1.1.x. OpenSSL 1.1.xe versioni successive sono in grado di riconoscere i normali file DESTDIR.

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.