GNU-Make

GNU Make-Tutorial

GNU Make-Tutorial

GNU Make ist ein Tool, das hilft, ausführbare Programme aus Quellcode zu generieren und auch andere Nicht-Quelldateien aus dem Projekt zu verarbeiten. Make erhält die Logik zum Erstellen der ausführbaren Dateien und zum Verarbeiten anderer Nicht-Quelldateien aus einer Datei namens a Makefile oder ein Makefile.

Warum machen?

Make . installieren

Make allein reicht nicht aus, um Programme zu erstellen. Um Programme aus dem Quellcode zu erstellen, müssen Compiler und andere Tools auf Ihrem System installiert sein. Für unseren Zweck benötigen wir also die gesamte Palette an Entwicklungstools.

Um Quellen unter Linux zu kompilieren, gibt es ein Paket namens „build-essential“ auf Debian-basierten Systemen (z.G. Ubuntu, Linux Mint usw.) und „Entwicklungstools“ auf Red Hat und CentOS.

Um dies auf Debian-basierten Systemen zu installieren:

apt-get install build-essential

Um dies auf CentOS und Red Hat zu installieren, führen Sie Folgendes aus:

yum groupinstall "Entwicklungstools"

Erste Schritte mit Makefile

Beginnen wir mit dem Schreiben von a Hallo Welt Programmieren mit der Programmiersprache C.

Die Hauptfunktion unseres C-Programms befindet sich im Inneren hallomain.c. Der Inhalt der Datei sollte wie folgt aussehen:

#einschließen  int main()  mein_fun(); 0 zurückgeben;  

Dieser Code enthält die Header-Datei hellofun.h, das die Deklaration einer Funktion namens hello_fun() enthält. Der Inhalt von hellofun.seine:

void my_fun();

Die Definition von my_fun() lebt in hellofun.c:

#einschließen  #einschließen  void my_fun()  printf("Hallo Welt!\n"); zurück; 

Dies ist ein sehr einfaches Programm und wir könnten es mit gcc mit nur einer Befehlszeile kompilieren. Aber reale Programme sind nicht so einfach und so klein wie diese. Es wird schnell komplex.  Im Folgenden werde ich das notwendige Makefile-Skript zum Kompilieren dieses Hello-World-Programms schreiben. Ich werde verschiedene Teile davon in den folgenden Abschnitten erklären.

hellomain: hellomain.c hallofun.c gcc -o hallo hallomain.c hallomain.c -I.

Bewahren Sie diesen Code in einer Datei namens makefile (ohne Dateierweiterung) auf. Legen Sie die Datei in das Verzeichnis, in dem sich die C-Dateien befinden. Zeigen Sie Ihre Befehlszeile in dieses Verzeichnis. Schreiben Sie in der Befehlszeile make und drücken Sie die Eingabetaste. Im aktuellen Verzeichnis wird eine ausführbare Datei namens hello generiert. Sie können das Ergebnis überprüfen, indem Sie die ausführbare Datei mit dem folgenden Befehl ausführen.

./Hallo

Ausgänge:

Hallo Welt!

Regeln, Ziele und Abhängigkeiten

Ein Makefile-Skript ist eine Sammlung von Regeln. Die Regeln weisen Make an, wie ein Ziel oder eine Ausgabe aus Quell- oder anderen Dateien erstellt wird. Die Regel spezifiziert auch Abhängigkeiten des Ziels. Die Abhängigkeitsregeln müssen zuerst ausgeführt werden, je nachdem ob diese bereits verarbeitet sind, indem man sich die Zeitstempel ansieht. In unserem Beispiel Makefile oben haben wir eine Regel mit dem Zielnamen hallomain und seine Abhängigkeiten. Der Zielname wird durch einen Doppelpunkt von der Abhängigkeitsliste getrennt. Die auszuführenden Shell-Befehle sind in der folgenden Zeile aufgeführt. Die Shell-Befehle müssen mit einem Tabulatorzeichen beginnen.

Wenn Sie beim make-Befehl keinen Parameter angeben, wird das erste Ziel ausgeführt. In unserem Beispiel haben wir keinen Parameter angegeben und wir hatten hallomain als erstes und einziges Ziel.

Variablen

Variablen sind eine großartige Möglichkeit, Werte einmal zu schreiben und sie mehrmals zu verwenden, ohne den Wert immer wieder zu wiederholen. Es hilft uns, unseren Code DRY (Do Not Repeat Yourself) zu halten. Wenn Sie jemals einen Wert im gesamten Skript ändern müssen, müssen Sie diesen nur an einer Stelle ändern, um die Änderung überall widerzuspiegeln, wenn Sie eine Variable verwenden.

In unserem Beispiel haben wir verwendet gcc als Compiler, aber wir müssen den Compiler möglicherweise auf etwas anderes ändern. So können wir den Compilernamen in einer Variablen behalten. Außerdem können wir die Compiler-Flags in einer anderen Variablen belassen, um diese wiederzuverwenden. Um einer Variablen einen Wert zuzuweisen, verwenden wir das Gleichheitszeichen (=) und zum Lesen dieser Variablen verwenden wir $(variable_name).

CC=gcc CFLAGS=-I. hellomain: hellomain.c hallofun.c $(CC) -o hallo hallomain.c hallomain.c $(CFLAGS)

Umwelt reinigen

Wir müssen unsere Umgebung oft reinigen. Wenn wir möchten, dass jedes Teil unseres Projekts von Grund auf neu aufgebaut wird, müssen wir es reinigen. In unserem einfachen Beispiel wird nur die Datei erzeugt Hallo ausführbar. Ohne das manuell zu löschen, können wir das mit make löschen. Wir können also eine Regel dafür erstellen und das Ziel als . benennen sauber.

CC=gcc CFLAGS=-I. hellomain: hellomain.c hallofun.c $(CC) -o hallo hallomain.c hallomain.c $(CFLAGS) clean: rm hallo

Der Shell-Befehl im sauberen Ziel ist nur der uralte Shell-Befehl rm. Führen Sie nun von der Befehlszeile aus:

sauber machen

Sehen Sie sich das aktuelle Verzeichnis an, um zu sehen, dass die Hallo ausführbare Datei ist weg.

Erweiterung unseres Beispiels zur Lösung weiterer Probleme

In unserem einfachen Hello-World-Kompilierungsbeispiel haben wir ein Problem, das wir noch nicht gelöst haben. hallomain Ziel sieht an hellomian.c und hallofun.c die Zeitstempel der Dateien, wenn Sie das nächste Mal versuchen, sie neu zu kompilieren machen oder mach hellomain. Wenn Sie also eine dieser beiden Dateien ändern, werden sie neu kompiliert. Aber wenn du dich änderst hallofun.ha dann wird es nicht neu kompiliert. Das ist unerwartet!

Auch hier haben wir eine Zwischenstufe übersprungen. Wir haben die Objektdateien nicht generiert und direkt die ausführbare Datei generiert. Aber im Hintergrund werden die Objektdateien in einem temporären Verzeichnis erstellt und gelöscht. Wir möchten die Objektdateien generieren, bevor wir die ausführbare Datei erstellen. Dieses Mal nennen wir das Hauptziel als alle

alle: hallomain.o hallofun.o gcc hallomain.o hallofu.o -o hallo hallomain.o: hallomain.c hallofun.h gcc -I. -c hallomain.c hallofun.o: hallofun.c hallofun.h gcc -I. -c hallofun.c sauber: rm -rf *.o rm hallo

Führen Sie den Befehl make erneut aus, um zu sehen, ob Ihr Programm erfolgreich erstellt wurde oder nicht. Führen Sie die ausführbare Datei hello aus, um das Ergebnis zu überprüfen. Schauen Sie sich das aktuelle Verzeichnis an und Sie werden sehen, dass Objektdateien erstellt werden. Wir haben dem clean-Target eine weitere Zeile hinzugefügt, um Objektdateien zu bereinigen. Dieses Makefile-Skript hilft bei der Neukompilierung des Hello-World-Programms, auch wenn das hallofun.ha Datei wird geändert.

Fazit

Make ist eines der wichtigsten Tools für Linux-Benutzer und -Programmierer. Wenn Sie ein Endbenutzer sind, wird Ihnen das Wissen über make helfen, viele kaputte Dinge in Ihrer Linux-Welt zu reparieren. Wenn Sie ein Programmierer sind, können Sie einfach nicht weggehen, indem Sie den Code schreiben und Ihre Benutzer herausfinden lassen, wie sie diesen Quellcode in ausführbare Dateien kompilieren können. Sie müssen ein Makefile-Skript für die Endbenutzer erstellen, damit sie kein Ratespiel spielen, um Ihre Quelle in ausführbare Dateien zu kompilieren.

Verweise

GNUMake-Projekt-Homepage
GNU Make-Dokumentation

Shadow of the Tomb Raider für Linux Tutorial
Shadow of the Tomb Raider ist die zwölfte Erweiterung der Tomb Raider-Reihe – ein Action-Adventure-Franchise von Eidos Montrealdos. Das Spiel wurde vo...
So steigern Sie die FPS unter Linux?
FPS steht für Bilder pro Sekunde. Die Aufgabe von FPS besteht darin, die Bildrate bei Videowiedergaben oder Spielleistungen zu messen. In einfachen Wo...
Top Oculus App Lab-Spiele
Wenn Sie Besitzer eines Oculus-Headsets sind, müssen Sie über Sideloading informiert sein. Sideloading ist der Prozess der Installation von Inhalten, ...