Wofür steht "alle" in einem Makefile?

105

Ich habe einige Tutorials zu Makefiles gelesen, aber für mich ist immer noch unklar, wofür das Ziel "all" steht und was es tut.

Irgendwelche Ideen?

Chris Smullian
quelle

Antworten:

116

Ein Build, wie Makefile es versteht, besteht aus vielen Zielen. Zum Beispiel, um ein Projekt zu erstellen, das Sie möglicherweise benötigen

  1. Erstellen Sie file1.o aus file1.c
  2. Erstellen Sie file2.o aus file2.c.
  3. Erstellen Sie file3.o aus file3.c
  4. Erstellen Sie die ausführbare Datei1 aus Datei1.o und Datei3.o
  5. Erstellen Sie die ausführbare Datei2 aus Datei2.o

Wenn Sie diesen Workflow mit Makefile implementiert haben, können Sie jedes der Ziele separat erstellen. Zum Beispiel, wenn Sie geschrieben haben

make file1.o

Diese Datei wird nur bei Bedarf erstellt.

Der Name von allist nicht festgelegt. Es ist nur ein herkömmlicher Name; allZiel bedeutet, dass make beim Aufrufen alles erstellt, was für einen vollständigen Build erforderlich ist . Dies ist normalerweise ein Dummy-Ziel, das keine Dateien erstellt, sondern nur von den anderen Dateien abhängt. Im obigen Beispiel werden beim Erstellen aller erforderlichen Dateien ausführbare Dateien erstellt, wobei die anderen Dateien als Abhängigkeiten abgerufen werden. Im Makefile sieht es also so aus:

all: executable1 executable2

allZiel ist normalerweise das erste im Makefile, da makees das erste Ziel erstellt , wenn Sie nur in die Befehlszeile schreiben , ohne das Ziel anzugeben. Und Sie erwarten esall .

allist in der Regel auch ein .PHONYZiel. Erfahren Sie hier mehr .

P Shved
quelle
31

Das Handbuch für GNU Make enthält eine klare Definition allin der Liste der Standardziele .

Wenn der Autor des Makefiles dieser Konvention folgt, allsollte das Ziel :

  1. Kompilieren Sie das gesamte Programm, erstellen Sie jedoch keine Dokumentation.
  2. Seien Sie das Standardziel. Wie beim Laufen makesollte man einfach das gleiche machen wie make all.

Das Erreichen von 1 allwird normalerweise als .PHONYZiel definiert , das von den ausführbaren Dateien abhängt, aus denen das gesamte Programm besteht:

.PHONY : all
all : executable

Um 2 zu erreichen, allsollte entweder das erste in der make-Datei definierte Ziel sein oder als Standardziel zugewiesen werden:

.DEFAULT_GOAL := all
PeterSW
quelle
3

Ich bin mir nicht sicher, ob es für etwas Besonderes steht. Es ist nur eine Konvention, dass Sie eine "Alle" -Regel angeben. Im Allgemeinen werden alle Unterziele aufgelistet, die zum Erstellen des gesamten Projekts erforderlich sind, daher der Name "Alle". Das einzig Besondere daran ist, dass die Leute es oft als erstes Ziel in das Makefile einfügen, was bedeutet, dass nur das alleinige Eingeben von 'make' dasselbe bewirkt wie 'make all'.

JustJeff
quelle
2

Das Ziel "all" ist ein Beispiel für ein Dummy-Ziel - auf der Festplatte befindet sich nichts mit dem Namen "all". Dies bedeutet, dass make bei einem "make all" immer denkt, dass es erstellt werden muss, und daher alle Befehle für dieses Ziel ausführt. Diese Befehle sind normalerweise solche, die alle Endprodukte erstellen, die das Makefile kennt, aber alles können.

Andere Beispiele für Dummy-Ziele sind "sauber" und "installieren" und funktionieren auf die gleiche Weise.

Wenn Sie es noch nicht gelesen haben, sollten Sie das GNU Make Manual lesen , das auch ein hervorragendes Tutorial ist.


quelle