[Linux] Projektautomatisierungs-Build-Tool-make/Makefile

Hintergrund

  • Ob man Makefiles schreiben kann oder nicht, zeigt nebenbei, ob eine Person in der Lage ist, Großprojekte abzuschließen.
  • Die Quelldateien in einem Projekt werden nicht gezählt. Sie werden je nach Typ, Funktion und Modul in mehreren Verzeichnissen abgelegt. Das Makefile definiert eine Reihe von Regeln, um anzugeben, welche Dateien zuerst kompiliert werden müssen, welche Dateien später kompiliert werden müssen. und welche Dateien neu kompiliert werden müssen. Kompilieren Sie und führen Sie sogar komplexere Funktionsoperationen aus.
  • Der Vorteil von Makefile ist die „automatische Kompilierung“. Sobald es geschrieben ist, ist nur ein Make-Befehl erforderlich, und das gesamte Projekt wird vollständig automatisch kompiliert, was die Effizienz der Softwareentwicklung erheblich verbessert.
  • make ist ein Befehlstool, das die Anweisungen im Makefile interpretiert. Im Allgemeinen verfügen die meisten IDEs über diesen Befehl, z. B. make von Delphi, nmake von Visual C++ und make von GNU unter Linux. Es ist ersichtlich, dass Makefile zu einer Kompilierungsmethode im Engineering geworden ist.
  • Make ist ein Befehl und makefile ist eine Datei. Sie werden zusammen verwendet, um die automatisierte Erstellung des Projekts abzuschließen.

Beispielcode

C-Code

#include <stdio.h>

int main()
{
    printf("hello Makefile!\n");
    return 0;
}

Makefile

hello:hello.o
    gcc -o hello hello.o
hello.o:hello.s
    gcc -c -o hello.o hello.s
hello.s:hello.i
    gcc -S -o hello.s hello.i
hello.i:hello.c
    gcc -E -o hello.i hello.c

.PHONY:clean
clean:
    rm -f hello.i hello.s hello.o hello

Abhängigkeiten

  • Die obige Datei „Hallo“ hängt von hello.o  ab
  •  hello.o , was von hello.s  abhängt
  •  hello.s , was von hello.i  abhängt
  •  hello.i , was von hello.c  abhängt

Abhängigkeitsmethode

  •  gcc -option hello.* hello.* ist die entsprechende Abhängigkeit.

Prinzip

So funktioniert make standardmäßig, das heißt, wir geben nur den make-Befehl ein. Also:

  1. make sucht im aktuellen Verzeichnis nach einer Datei mit dem Namen „Makefile“ oder „makefile“.
  2. Wenn es gefunden wird, wird nach der ersten Zieldatei (Ziel) in der Datei gesucht. Im obigen Beispiel wird die Datei „Hallo“ gefunden und diese Datei als endgültige Zieldatei verwendet.
  3. Wenn die Hallo-Datei nicht vorhanden ist oder die Dateiänderungszeit der Hallo.o-Datei, von der Hallo abhängt, neuer ist als die Hallo-Datei (Sie können Touch zum Testen verwenden), führt er den später definierten Befehl aus, um Hallo zu generieren. dokumentieren.
  4. Wenn die hello.o-Datei, von der hello abhängt, nicht existiert, sucht make nach der Abhängigkeit der hello.o-Datei in der aktuellen Datei. Wenn sie gefunden wird, generiert es die hello.o-Datei gemäß dieser Regel. (Dies ist ein bisschen wie ein Stapelprozess)
  5. Natürlich sind Ihre C- und H-Dateien vorhanden, daher generiert make die Datei hello.o und verwendet dann die Datei hello.o, um die ultimative Aufgabe von make zu deklarieren: Führen Sie die Datei hello aus.
  6. Dies ist die Abhängigkeit des gesamten Makes. Make sucht Schicht für Schicht nach Dateiabhängigkeiten, bis die erste Zieldatei schließlich kompiliert ist.
  7. Wenn während des Suchvorgangs ein Fehler auftritt, beispielsweise wenn die letzte abhängige Datei nicht gefunden werden kann, wird make direkt beendet und einen Fehler melden. Fehler in den definierten Befehlen oder fehlgeschlagene Kompilierungen werden von Make einfach ignoriert.
  8. make kümmert sich nur um die Abhängigkeiten von Dateien, das heißt: Wenn die Datei nach dem Doppelpunkt immer noch nicht vorhanden ist, nachdem ich die Abhängigkeiten gefunden habe, dann tut es mir leid, ich werde nicht arbeiten.

Projektbereinigung

  • Das Projekt muss bereinigt werden
  • Wenn es wie clean nicht direkt oder indirekt mit der ersten Zieldatei verknüpft ist, werden die danach definierten Befehle nicht automatisch ausgeführt. Wir können jedoch zeigen, dass make ausgeführt wird. Das heißt, der Befehl „make clean“ löscht alle Zieldateien für die Neukompilierung.
  • Aber im Allgemeinen legen wir unsere sauberen Zieldateien als Pseudoziel fest und ändern es mit .PHONY . Das Merkmal des Pseudoziels ist, dass es immer ausgeführt wird.
  • Sie können unsere Hallo- Zieldatei als Pseudoziel deklarieren und testen.

Ende des Artikels

Guess you like

Origin blog.csdn.net/m0_73156359/article/details/135044718