DESTDIR und PREFIX von make

118

Ich versuche, die Software in einem bestimmten Verzeichnis zu installieren. Ich habe verschiedene Wege gefunden, bin mir aber nicht sicher, was die Unterschiede zwischen ihnen sind.

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

Ich bin verwirrt über die Funktionen dieser drei. Erreichen sie das gleiche Ziel?

Sean
quelle

Antworten:

184

./configure --prefix=***

Nummer 1 bestimmt, wohin das Paket bei der Installation geht und wo es bei der Ausführung nach den zugehörigen Dateien sucht. Dies sollten Sie verwenden, wenn Sie nur etwas für die Verwendung auf einem einzelnen Host kompilieren.


make install DESTDIR=***

Nummer 2 dient zur Installation in einem temporären Verzeichnis, in dem das Paket nicht ausgeführt wird. Dies wird beispielsweise beim Erstellen von debPaketen verwendet. Die Person, die das Paket erstellt, installiert nicht alles an seinem endgültigen Platz auf ihrem eigenen System. Möglicherweise hat er bereits eine andere Version installiert und möchte diese nicht stören, oder er ist möglicherweise nicht einmal root. Also benutzt er

./configure --prefix=/usr

Das Programm wird also voraussichtlich installiert, /usrwenn es ausgeführt wird

make install DESTDIR=debian/tmp

um die Verzeichnisstruktur tatsächlich zu erstellen.


make install prefix=***

Nummer 3 wird es an einem anderen Ort installieren, aber nicht alle Verzeichnisse wie DESTDIR=/foo/bar/bazgewohnt erstellen . Es wird häufig mit GNU Stow via verwendet

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

, die Binärdateien in installieren würde /usr/local/stow/foo/bin. Im Vergleich,

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

würde Binärdateien in installieren /usr/local/stow/foo/usr/local/bin.

Alan Curry
quelle
8
Für das, was es wert ist, können Sie in einem cmake-basierten Build "case 4" (zum Verstauen usw.) emulieren, indem Sie es cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakeim Build-Verzeichnis ausführen .
Ryan Pavlik
@ JackKelly: Danke! Ich habe DESTDIR mit GNU stow verwendet und musste die Verzeichnisstruktur mit einem mv usr/local/* . && rmdir usr/local && rmdir usrtypischen Fehler beheben - die Verwendung prefix=ist viel besser!
thinkski
Hinweis: Einige Softwareprogramme werden nicht unterstützt DESTDIR=/tmp/foo make install. Für cmake-basierte Projekte hatte ich mehr Glück bei cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeder Installation /tmp/foo/{bin,...}. Ein Beispiel finden Sie unter github.com/opencv/opencv/issues/11833#issuecomment-401164056 .
Timotheecour
Noch ein Hinweis: DESTDIRund prefixkann make installzusammen verwendet werden, dh make install DESTDIR=/foo/bar/tmp perfix=/local.
Albert
1

Dies kann helfen, die Verwendung von DESTDIRund --prefix(von hier aus ) zu veranschaulichen :

Mehrere Installationen mit --prefix und DESTDIR:

Trennen Sie zur Konfigurationszeit für jeden Build einen anderen Präfix-Speicherort / eine andere Option. Zum Beispiel:

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
sancho.s ReinstateMonicaCellio
quelle
Falls die ./configure-Datei nicht bereitgestellt wird, kann sie dennoch in einem benutzerspezifischen Verzeichnis installiert werden, indem Folgendes verwendet wird: make prefix = / path / to / your / lib / libaio install
Good Will
0

Von openssl/INSTALL

Paketersteller, die die Bibliothek für Standardspeicherorte konfigurieren möchten, das Paket jedoch an einer anderen Stelle installiert haben, damit es problemlos verpackt werden kann, können es verwenden

$ make INSTALL_PREFIX=/tmp/package-root install

(oder geben Sie "--install_prefix = / tmp / package-root" als Konfigurationsoption an). Das angegebene Präfix wird allen Installationsziel-Dateinamen vorangestellt.

Dies ist nicht Standard, aber INSTALL_PREFIX wird in einigen anderen Programmen verwendet.

Dies funktioniert für OpenSSL-Versionen vor 1.1.x. OpenSSL 1.1.x und höher können das Übliche erkennen DESTDIR.

kyb
quelle