DESTDIR und PREFIX des Herstellers

Lesezeit: 3 Minuten

Benutzeravatar von Sean
Sean

Ich versuche, Software in einem bestimmten Verzeichnis installieren zu lassen. Ich habe mehrere Möglichkeiten 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 dasselbe Ziel?

Benutzeravatar von Alan Curry
Alan Curry

./configure --prefix=***

Nummer 1 legt fest, wohin das Paket bei der Installation verschoben wird und wo es nach den zugehörigen Dateien sucht, wenn es ausgeführt wird. Es ist das, was Sie verwenden sollten, wenn Sie nur etwas für die Verwendung auf einem einzelnen Host kompilieren.


make install DESTDIR=***

Nummer 2 dient der Installation in einem temporären Verzeichnis, von dem aus das Paket nicht ausgeführt wird. Dies wird zum Beispiel beim Bauen verwendet deb Pakete. Die Person, die das Paket erstellt, installiert nicht alles an seinem endgültigen Platz auf seinem 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 nutzt er

./configure --prefix=/usr

Das Programm wird also erwartet, dass es installiert wird /usr wenn es dann läuft

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 erstellen DESTDIR=/foo/bar/baz möchten. 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 installieren in /usr/local/stow/foo/usr/local/bin.

  • Für das, was es wert ist, können Sie in einem cmake-basierten Build “Fall 4” (für Stow usw.) durch Ausführen emulieren cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake im Build-Verzeichnis.

    – Ryan Pavlik

    6. September 2012 um 17:12 Uhr

  • @JackKelly: Danke! Ich habe DESTDIR mit GNU Stow verwendet und musste die Verzeichnisstruktur mit a reparieren mv usr/local/* . && rmdir usr/local && rmdir usr typischerweise — mit prefix= ist viel besser!

    – Denkski

    24. August 2014 um 7:35 Uhr

  • Hinweis: Einige Software wird nicht unterstützt DESTDIR=/tmp/foo make install ; Bei cmake-basierten Projekten hatte ich mehr Glück mit cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmake die installiert /tmp/foo/{bin,...} ; sehen github.com/opencv/opencv/issues/11833#issuecomment-401164056 zum Beispiel.

    – Timotheecour

    28. Juni 2018 um 20:37 Uhr

  • Noch eine Anmerkung: DESTDIR und prefix kann verwendet werden make install zusammen, dh make install DESTDIR=/foo/bar/tmp perfix=/local.

    – Albert

    1. April 2019 um 7:40 Uhr

  • Also wenn ich laufe ./configure --prefix=path1 und dann make install prefix=path2, path2 überschreibt path1, Rechts? Gibt es noch andere Unterschiede zw path1 und path2?

    – Филя Усков

    9. Juni 2021 um 8:56 Uhr


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

Mehrere Installationen mit –prefix und DESTDIR:

Geben Sie für jeden Build eine andere –prefix Position/Option an – zur Konfigurationszeit. 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

  • Falls die ./configure-Datei nicht bereitgestellt wird, kann man trotzdem in ein benutzerspezifisches Verzeichnis installieren, indem man verwendet: make prefix=/path/to/your/lib/libaio install

    – Guter Wille

    30. Dezember 2018 um 22:24 Uhr

Benutzeravatar von kyb
kyb

Aus openssl/INSTALL

Paketersteller, die die Bibliothek für Standardspeicherorte konfigurieren möchten, aber das Paket woanders installiert haben, damit es einfach gepackt werden kann, können 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 Dateinamen der Installationsziele vorangestellt.

Dies ist kein 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 übliche erkennen DESTDIR.

1424760cookie-checkDESTDIR und PREFIX des Herstellers

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy