2010-03-25 14 views

Antwort

79

Ein Build, wie Makefile es versteht, besteht aus einer Vielzahl von Zielen. Zum Beispiel, um ein Projekt bauen Sie

  1. Bauen file1.o aus file1.c
  2. Bauen file2.o aus file2.c
  3. Build-file3.o aus file3.c Möglicherweise müssen
  4. Build-executable1 aus file1.o und file3.o
  5. Bauen executable2 aus file2.o

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.

2

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.

1

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.

+0

Und vergessen Sie nicht Mr.Proper (übrigens mrproperly) und distclean ... – t0mm13b

18

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:

  1. das gesamte Programm kompilieren, aber keine Dokumentation bauen.
  2. Seien Sie das Standardziel. Wie im laufenden nur 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