Ich lese einige Tutorials über Makefiles, aber für mich ist es immer noch unklar, wofür das Ziel "All" steht und was es tut.Wofür steht "alles" in einem Makefile?
Irgendwelche Ideen?
Ich lese einige Tutorials über Makefiles, aber für mich ist es immer noch unklar, wofür das Ziel "All" steht und was es tut.Wofür steht "alles" in einem Makefile?
Irgendwelche Ideen?
Ein Build, wie Makefile es versteht, besteht aus einer Vielzahl von Zielen. Zum Beispiel, um ein Projekt bauen Sie
Wenn Sie diesen Workflow mit Make-Datei implementiert, können Sie jedes der Ziele separatel machen y. Wenn Sie beispielsweise
make file1.o
schreiben, würde es nur diese Datei erstellen, falls erforderlich.
Der Name all
ist nicht festgelegt. Es ist nur ein konventioneller Name; all
Ziel bedeutet, dass Wenn Sie es aufrufen, wird make alles, was benötigt wird, um einen vollständigen Build. Dies ist normalerweise ein Dummy-Ziel, das keine Dateien erstellt, sondern nur von den anderen Dateien abhängt. Für das obige Beispiel baut das Gebäude alle notwendig ausführbare Dateien, die anderen Dateien werden als Abhängigkeiten eingezogen. So in der Make-Datei sieht es wie folgt aus:
all: executable1 executable2
all
Ziel ist in der Regel die erste in der Make-Datei, da, wenn Sie nur make
in der Kommandozeile schreiben, ohne das Ziel zu spezifizieren, wird es das erste Ziel zu bauen. Und Sie erwarten, dass es all
ist.
all
ist normalerweise auch ein .PHONY
Ziel. Erfahren Sie mehr here.
Nicht sicher, dass es für etwas Besonderes steht. Es ist nur eine Konvention, dass Sie eine "All" -Regel angeben, und im Allgemeinen wird es verwendet, um alle Unterziele aufzulisten, die benötigt werden, um das gesamte Projekt aufzubauen, daher der Name "alle". Das Einzige, was daran besonders ist, ist, dass die Leute es oft als erstes Ziel in das Makefile stellen, was bedeutet, dass das bloße Eingeben von "make" das Gleiche wie "make all" macht.
Das Ziel "all" ist ein Beispiel für ein Dummy-Ziel - es gibt nichts auf der Festplatte namens "all". Das heißt, wenn Sie "make all" machen, denkt make immer, dass sie es erstellen muss, und führt so alle Befehle für dieses Ziel aus. Diese Befehle sind normalerweise diejenigen, die alle Endprodukte erstellen, die das Makefile kennt, aber es könnte alles tun.
Andere Beispiele für Dummy-Ziele sind "sauber" und "installieren", und sie funktionieren auf die gleiche Weise.
Wenn Sie es noch nicht gelesen haben, sollten Sie die GNU Make Manual lesen, die auch ein hervorragendes Tutorial ist.
Das Handbuch für GNU Make gibt eine klare Definition für all
in seiner list of standard targets.
Wenn der Autor des Makefiles, dass die Konvention folgend wird dann das Ziel all
soll:
make
sollte das gleiche tun wie make all
.Zu 1 erreichen all
wird typischerweise als .PHONY
Ziel definiert, die an der ausführbaren Datei abhängt (s), die das gesamte Programm bilden:
.PHONY : all
all : executable
2 zu erreichen all
entweder das erste Ziel definiert werden soll in die make-Datei oder als Standardziel zugewiesen werden:
.DEFAULT_GOAL := all
Und vergessen Sie nicht Mr.Proper (übrigens mrproperly) und distclean ... – t0mm13b