it-swarm.com.de

Was macht 'make install'?

Beim Übergang von Windows zu Linux kann ich den Prozess der Installation von Software unter Linux nicht verstehen. Wenn wir unter Windows eine Installationsdatei ausführen, werden Sie gefragt, wo Sie das Programm installieren möchten, höchstwahrscheinlich nur im Ordner mit den Programmdateien. Später bearbeitet es die Registrierung. Dies wird als Installation in Windows bezeichnet. Was bedeutet das Installieren von Software unter Linux genau?

Angenommen, ich habe den Quellcode heruntergeladen, ihn konfiguriert und dann die Binärdatei mit make erstellt. Jetzt ist es nur eine Binärdatei, noch kein brauchbares Programm. Wie wird es installiert? Von make install? Und was genau macht dieser Befehl?

47
KawaiKx

Make ist ein allgemeines Workflow-Programm, das normalerweise zum Kompilieren verwendet wird. Aber es kann für alles verwendet werden.

Wenn Sie so etwas wie "make all" ausführen, führt das make-Programm eine Regel mit dem Namen "all" aus einer Datei im aktuellen Verzeichnis mit dem Namen "Makefile" aus. Diese Regel ruft normalerweise den Compiler auf, um Quellcode in Binärdateien zu kompilieren.

Wenn Sie "make install" ausführen, übernimmt das make-Programm die Binärdateien aus dem vorherigen Schritt und kopiert sie an einige geeignete Speicherorte, damit auf sie zugegriffen werden kann. Anders als unter Windows müssen für die Installation nur einige Bibliotheken und ausführbare Dateien kopiert werden, und es besteht keine eigentliche Registrierungspflicht. Kurz gesagt, "make install" kopiert nur kompilierte Dateien an die entsprechenden Speicherorte.

42
sharjeel

make install macht, was der Makefile-Autor will. In der Regel ist es zu diesem Zeitpunkt zu spät, das Installationsverzeichnis zu ändern, wie es häufig früher während des Builds genannt wird, sodass auf Hilfedateien und Konfigurationsdateien mit den richtigen Pfadnamen verwiesen werden kann.

Viele Projekte verwenden die GNU-Autotools , um ihre Portabilität zwischen Hardware- und Betriebssystemunterschieden zu verbessern. (Verschiedene Unix-Varianten verwenden leicht unterschiedliche Header für Deklarationen von Funktionen, die leicht vom üblichen Pfad abweichen - mit der Ausnahme, dass die meisten Programme die einen oder anderen benötigen, die an verschiedenen Orten deklariert sind.)

Wenn ein Projekt die Autotools verwendet, lautet das normale Mantra für die Installation:

./configure
make
make install

Mit dem ./configure können Sie normalerweise eine Befehlszeilenoption wie --prefix /opt/Apache oder etwas Ähnliches verwenden, um einen anderen Pfadnamen anzugeben. /usr/local/ ist eine übliche Standardeinstellung prefix. Es ist viel einfacher, lokal erstellte Software an einem Ort und von der Distribution bereitgestellte Software in den "Hauptverzeichnissen" zu speichern: /usr//bin/ und so weiter. (Packager sind sehr darauf bedacht niemals Dateien in /usr/local/ zu berühren - sie wissen, dass dies ausschließlich für Systemadministratoren bestimmt ist.)

Wie auch immer, der ./configure --prefix /path/to/new/prefix setzt eine Variable in der Makefile, die beim Kompilieren des Programms verfügbar ist, und ändert die Handbuchseiten so, dass sie auf die richtigen Speicherorte für Dateien, Konfigurationsdateien usw. verweisen. Daher erstellt make die Software speziell für den Installationsort Sie möchten und make install wird es an diesem Ort installieren.

Die meisten Programme können auch ohne den letzten make install-Schritt ausgeführt werden - nur ./program_name startet sie oft. Dies ist definitiv eine Sache pro Projekt - einige, wie postfix, qmail usw., bestehen aus vielen verschiedenen beweglichen Teilen und setzen darauf, dass alle zusammenarbeiten. Andere, wie ls oder su, sind möglicherweise in sich geschlossen genug, um in dem Verzeichnis, in dem sie erstellt wurden, ordnungsgemäß ausgeführt zu werden. (Dies ist nicht oft nützlich, aber manchmal sehr nützlich.)

Allerdings verwenden nicht alle Projekte die Autotools - sie sind riesig , kompliziert und in der Wartung miserabel. Handgeschriebene Makefiles sind viel einfacher zu schreiben, und ich persönlich denke, dass das Verteilen einer einfachen Makefile mit verfügbaren Konfigurationsvariablen sowohl für Entwickler als auch für Benutzer viel einfacher ist. (Obwohl das ./configure ; make ; make install-Mantra wirklich benutzerfreundlich ist, wenn es funktioniert.)

35
sarnold

make install führt nichts anderes aus, als die Funktion/den Abschnitt install in Ihrer Makefile auszuführen.

17
sascha

Das Wichtigste bei der Installation von Software unter Linux ist, dass die Installation von Software aus Ihrer Distribution sehr viel zuverlässiger und einfacher ist (dies ist der Zweck!). Verwenden Sie make install nur, wenn es keine andere Möglichkeit gibt (auch alternative Programme).

Ein häufiger Fehler von Windows-Benutzern besteht darin, Programme von verschiedenen Orten herunterzuladen und zu installieren. Dabei wird vergessen, die Distributionspakete auszuchecken, die mit einem einzigen Klick oder Befehl (im Paketmanager) installiert werden können.

Denken Sie auch daran, dass einer der Hauptgründe für die Abwesenheit von Virusinfektionen unter Linux darin besteht, dass Software von einem zentralen (vertrauenswürdigen) Ort aus anstelle der vielen zufälligen Sites installiert wird (oder werden sollte).

Als zusätzliche Anmerkung: Während Distributionen wie Ubuntu immer veraltete Pakete enthalten, gibt es auch Distributionen wie Arch Linux, die immer auf dem neuesten Stand sind (obwohl sie nicht buchstäblich jedes Programm bieten, das jemals für Linux veröffentlicht wurde, wie Debian/Ubuntu).

Was genau passieren würde, wenn Sie den Paket-Manager verwenden, würde er Abhängigkeiten überprüfen, Pakete herunterladen, entpacken, alle Dateien in die entsprechenden Verzeichnisse legen, gemäß den Richtlinien von FHS und Distribution sowie einigen anderen Routinen, die Sie wahrscheinlich kennenlernen könnten von der Manpage des Paketmanagers.

8
corvinus