Was macht 'make install'?

52

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 erstellt make. Jetzt ist es nur eine Binärdatei, noch kein brauchbares Programm. Wie wird es installiert? Von make install? Und was genau macht dieser Befehl?

KawaiKx
quelle
1
Meine Antwort auf stackoverflow.com/questions/528399/… gibt einen kurzen Überblick über die üblichen make installSchritte aus Sicht eines Programmierers.
dmckee

Antworten:

44

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.

Sharjeel
quelle
4
Technisch ist die Registrierung keine Voraussetzung - was alle Installer hinzufügen, ist nur eine Komfortfunktion, ähnlich wie die Paketmanager-Datenbank unter Linux, für Leute, die Software deinstallieren möchten.
Grawity
2
@grawity In Windows muss die Registrierung aus vielen Gründen bearbeitet werden, z. B. aus Gründen der Integration. Unter Linux müssen zum Integrieren von Software in der Regel nur Dateien kopiert oder Zeilen zu Konfigurationsdateien hinzugefügt werden, etwa durch ein Skript nach der Installation.
Camilo Martin
@sharjeel Es wäre hilfreich , zu sagen , wie ich die Regel mit dem Namen finden allin der Makefileund was die Endmarkierung dieses Abschnitts aussieht, so kann ich , wo die Regelverarbeitung für sehen allstoppt.
Pro Backup
36

make installmacht, was der MakefileAutor 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 bekannt ist, 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

In der ./configureRegel können Sie eine Befehlszeilenoption wie --prefix /opt/apacheoder etwas Ähnliches verwenden, um einen anderen Pfadnamen anzugeben. /usr/local/ist eine gängige Standardeinstellung prefix. Es ist weitaus einfacher, lokal erstellte Software an einem Ort und von der Distribution bereitgestellte Software in den "Hauptverzeichnissen": /usr/ /bin/usw. zu speichern. (Packager achten sehr darauf, dass sie niemals Dateien berühren /usr/local/- sie wissen, dass dies ausschließlich für Systemadministratoren bestimmt ist.)

Wie auch immer, das ./configure --prefix /path/to/new/prefixsetzt eine Variable in das Makefile, was beim Kompilieren des Programms verfügbar ist, und ändert die Handbuchseiten so, dass sie auf die richtigen Speicherorte für Dateien, Konfigurationsdateien usw. verweisen. So makewird die Software speziell für den gewünschten Installationsort erstellt und make installwird es an diesem Ort installieren.

Die meisten Programme können auch ohne den letzten make installSchritt ausgeführt ./program_namewerden. Oft werden sie nur gestartet. Dies ist definitiv ein pro-Projekt Sache - einige, wie postfix, qmailetc. werden von vielen verschiedenen beweglichen Teile aus und verlassen sich auf sie alle zusammen arbeiten. Andere mögen lsoder sind sumö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 die einfache Verteilung Makefilemit verfügbaren Konfigurationsvariablen sowohl für Entwickler als auch für Benutzer viel einfacher ist. (Obwohl das ./configure ; make ; make installMantra für Benutzer wirklich einfach ist, wenn es funktioniert.)

Sarnold
quelle
19

make installtut nichts weniger als das Ausführen der installFunktion / des Abschnitts in IhremMakefile

Sascha
quelle
Richtig, es gefällt einfach make clean, im Grunde führt es nur die Codes unter dem Abschnitt aus.
Wulfric Lee
8

Das Wichtigste bei der Installation von Software unter Linux ist, dass es viel zuverlässiger und einfacher ist, Software von Ihrer Distribution zu installieren (dies ist der Zweck!). Nur verwenden, make installwenn es keine andere Möglichkeit gibt (auch alternative Programme in Betracht ziehen).

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.

corvinus
quelle