Installation durchführen, aber nicht in Standardverzeichnisse?

148

Ich möchte 'make install' ausführen, damit ich alles habe, was ich brauche, aber ich möchte, dass die Dinge in einem eigenen Ordner installiert werden, im Gegensatz zu / usr / bin usw. des Systems. Ist das möglich? auch wenn es auf Tools in / usr / bin etc. verweist?

Jon Phenow
quelle
3
Wenn Sie das Projekt bereits erstellt haben und ./configure ohne Präfix ausgeführt haben und es in einem benutzerdefinierten Pfad installieren möchten, lesen
bitk

Antworten:

211

Das hängt vom Paket ab. Wenn das Makefile von GNU autotools ( ./configure) generiert wird , können Sie den Zielspeicherort normalerweise wie folgt festlegen :

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

Wenn das Makefile nicht von Autotools generiert, sondern zusammen mit der Software verteilt wird, öffnen Sie es einfach in einem Editor und ändern Sie es. Das Installationszielverzeichnis ist wahrscheinlich irgendwo in einer Variablen definiert.

Thomas
quelle
9
sollte nicht make && make installder configure-Klausel folgen?
Nass
1
Das Problem, mit dem ich habe, --prefixist, dass, wenn Sie anschließend eine stringsauf der resultierenden Binärdatei ausführen , Sie sehen, dass der Pfad darin gespeichert ist. Ich weiß nicht, warum dies passiert, aber ich möchte auf keinen Fall, dass meine Computerpfade auf Binärdateien gespeichert werden, die ich an andere Benutzer versende.
Erik Aigner
Erik, es sieht so aus, als würde es ohnehin Verweise auf den Pfad geben, in dem Sie make erstellen, wenn Sie aus dem Quellcode erstellen.
Konstantin Rybakov
44

Da Sie nicht wissen, welche Version von automake Sie verwenden können, können Sie die Umgebungsvariable DESTDIR verwenden .
Siehe Makefile, um sicherzugehen.

Beispielsweise:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install
Andor
quelle
9
Dies funktioniert, wenn Sie configure ohne das Befehlszeilenargument --prefix ausgeführt haben und das Projekt bereits erstellt haben, es jedoch nicht an den Standardspeicherorten installieren möchten, sondern stattdessen einen benutzerdefinierten Installationspfad angeben. Dadurch wird der Standardpfad usr / local / bin / an das DESTDIR angehängt und Ihr Projekt wird
bitk installiert
Dies ist eine brillante Lösung. Ich weiß nicht, warum dies nicht die gewählte Antwort ist! Fast alle anderen Antworten müssen neu konfiguriert werden, was bedeutet, dass auch eine Neukonfiguration erforderlich ist. Stellen Sie sich vor, Sie haben nach 2 bis 3 Stunden den gesamten MITK-Superbuild kompiliert und werden dann gebeten, ihn zu wiederholen, nur weil ich die kompilierten Dateien an einem anderen Speicherort installieren möchte. Dies hier ist eine wunderbare Lösung, um diese Situation zu vermeiden.
Duck Dodgers
23
make DESTDIR=./new/customized/path install

Dieser Schnellbefehl funktionierte für mich bei der Installation von opencv Release 3.2.0 unter Ubuntu 16. Der DESTDIR-Pfad kann sowohl relativ als auch absolut sein.

Eine solche Umleitung kann auch nützlich sein, wenn der Benutzer keine Administratorrechte besitzt, solange der DESTDIR-Speicherort den richtigen Zugriff für den Benutzer hat. zB / home //

Samasat
quelle
1
Möglicherweise muss PREFIX auch überschrieben werden, wenn es einen Standardwert im Makefile hat
Mark Ch
17

Dies kann davon abhängen, was von dem Modul unterstützt wird, das Sie kompilieren möchten. Wenn Ihr Makefile mithilfe von Autotools generiert wird, verwenden Sie:

--prefix=<myinstalldir>

beim Ausführen der ./configure

Bei einigen Paketen können Sie auch Folgendes überschreiben:

make prefix=<myinstalldir>

Wenn Sie jedoch ./configure nicht verwenden, können Sie dies nur feststellen, indem Sie das Makefile öffnen und überprüfen. Es sollte eine der ersten Variablen oben sein.

Tree77
quelle
3
Sie sollten sich auch darüber im Klaren sein, dass make prefix=...dies zu Binärdateien mit falsch fest codierten Pfaden führen kann, da diese normalerweise nicht geändert werden können./configure --prefix=...
Tobias Kienzler
0

Ich habe die oben genannten Lösungen ausprobiert. Keiner hat funktioniert.

Am Ende habe ich die Makefile-Datei geöffnet und den Präfixpfad wie unten manuell in den gewünschten Installationspfad geändert.

PREFIX ?= "installation path"

Als ich --prefix ausprobierte, beschwerte sich "make", dass es keine solche Befehlseingabe gibt. Einige Pakete akzeptieren jedoch möglicherweise --prefix, was natürlich eine sauberere Lösung ist.

Majid Azimi
quelle
1
Die --prefixOption ist, zu ./configureder Sie VORher anrufen make.
Gus
-7

Versuchen Sie es mit INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Christopher
quelle
11
Schlagen Sie nicht vor, dass Leute etwas "versuchen", ohne bestätigende Informationen.
RichieHH
Dies sollte ein Kommentar sein.
EJoshuaS - Monica