Linux: Die GNU Make-Datei

Unter Linux ein Make-Datei Datei ist ein Text, der beschreibt, welche Dateien werden benötigt, um ein bestimmtes Programm als auch, wie zu kompilieren und verknüpfen Sie die Dateien zu erstellen, das Programm zu bauen. Für ein Linux-Programm aus mehreren Quell- und Header-Dateien aus, die Make-Datei gibt die folgende:

  • Die Elemente, die machen erstellt - in der Regel die Objektdateien und die ausführbare Datei. Mit dem Begriff Ziel auf ein beliebiges Element zu verweisen, hat zu schaffen machen, ist weit verbreitet.

  • Die Dateien oder andere Aktionen erforderlich, um das Ziel zu schaffen.

  • Welche Befehle auszuführen jedes Ziel zu schaffen.

Nehmen wir an, dass Sie eine C ++ Quelldatei mit dem Namen form.C dass enthält folgende Präprozessordirektive:

#include "form.h" // Include-Header-Datei

Die Objektdatei form.o klar ist abhängig von der Quelldatei form.C und die Header-Datei form.h. Zusätzlich zu diesen Abhängigkeiten, müssen Sie angeben, wie machen wandelt der form.C Datei in der Objektdatei form.o. Angenommen, Sie möchten machen aufrufen g ++ mit diesen Optionen (weil die Quelldatei in C ++ ist):

  • -c (Kompilieren nur)

  • -G (Generieren Debug-Informationen)

  • -O2 (Optimierung etwas)

In dem Make-Datei, Sie können diese Optionen mit folgender Regel ausdrücken:

# Dies ist ein Kommentar in der Make-Datei # Die folgenden Zeilen zeigen, wie form.o # auf form.C und form.h abhängt und wie form.o.form.o zu erstellen: form.C form.hg ++ -c -g -O2 form.C

In diesem Beispiel ist die erste noncomment Linie zeigt form.o als Target und form.C und form.h wie die abhängigen Dateien.

Die Linie nach der Abhängigkeit gibt an, wie das Ziel von ihr abhängigen Menschen zu bauen. Diese Zeile muss mit einem Tab starten. sonst wird die machen Befehl verlässt mit einer Fehlermeldung, und Sie Ihren Kopf nach links kratzen, denn wenn man auf der Suche Make-Datei in einem Texteditor können Sie den Unterschied zwischen einem Register und einem Raum nicht sagen.

Nun, da Sie das Geheimnis kennen, ist das Update den Raum zu Beginn des betreffenden Zeile mit einem einzelnen Register zu ersetzen.

Der Vorteil der unter Verwendung der ist, dass es nicht notwendig Kompilierungen verhindert. Schließlich können Sie laufen g ++ (oder gcc) Von einem Shell-Skript zu kompilieren und alle Dateien verknüpfen, die Ihre Anwendung bilden, aber das Shell-Skript kompiliert alles, auch wenn die Compilations unnötig sind.

GNU machen, Auf der anderen Seite baut ein Ziel nur, wenn eine oder mehrere ihrer Angehörigen seit dem letzten Mal wurde die Ziel gebaut geändert haben. machen prüft diese Veränderung durch die Zeit der letzten Änderung des Ziels und die Abhängigen zu untersuchen.

machen behandelt das Ziel als der Name eines Ziel achieved- das Ziel eine Datei zu sein nicht sein müssen. Sie können eine Regel haben, wie diese:

sauber: rm -f * .o

Diese Regel gibt ein abstraktes Ziel mit dem Namen reinigen dass hängt nicht von irgendetwas. Diese Abhängigkeit Erklärung sagt, dass das Ziel zu schaffen reinigen, GNU machen ruft den Befehl rm -f * .o, die löscht alle Dateien, die das haben .O Verlängerung (nämlich die Objektdateien). So nannte der Effekt der das Ziel die Schaffung reinigen ist, um die Objektdateien zu löschen.

Menü