Waar staat “alle” voor in een makefile?

Ik heb enkele tutorials gelezen over Makefiles, maar voor mij is het nog steeds onduidelijk waar het doel “all” voor staat en wat het doet.

Enig idee?


Antwoord 1, autoriteit 100%

Een build, zoals Makefile het begrijpt, bestaat uit veel doelen. Om bijvoorbeeld een project te bouwen dat u nodig heeft

  1. Bouw bestand1.o uit bestand1.c
  2. Bouw file2.o uit file2.c
  3. Bouw file3.o uit file3.c
  4. Bouw uitvoerbaar1 uit file1.o en file3.o
  5. Bouw uitvoerbaar2 uit file2.o

Als je deze workflow met makefile hebt geïmplementeerd, zou je elk van de doelen afzonderlijk kunnen maken. Als u bijvoorbeeld

. schreef

make file1.o

het zou alleen dat bestand bouwen, indien nodig.

De naam van allstaat niet vast. Het is gewoon een conventionele naam; alldoel geeft aan dat als je het aanroept, make alleszal bouwen wat nodig is om een complete build te maken. Dit is meestal een dummy-target, die geen bestanden aanmaakt, maar alleen afhankelijk is van de andere bestanden. Voor het bovenstaande voorbeeld is het bouwen van alleswat nodig is het bouwen van uitvoerbare bestanden, waarbij de andere bestanden worden binnengehaald als afhankelijkheden. Dus in de makefile ziet het er zo uit:

all: executable1 executable2

all-doel is meestal het eerste in de makefile, want als je gewoon makein de opdrachtregel schrijft, zonder het doel op te geven, zal het het eerste doel bouwen. En je verwacht dat het allis.

allis meestal ook een .PHONY-doelwit. Meer informatie hier.


Antwoord 2, autoriteit 24%

De handleiding voor GNU Make geeft een duidelijke definitie voor allin zijn lijst met standaarddoelen.

Als de auteur van de Makefile die conventie volgt, moet het doel all:

  1. Compileer het hele programma, maar bouw geen documentatie.
  2. Wees het standaarddoel. Zoals bij het uitvoeren van gewoon makezou hetzelfde moeten doen als make all.

Om 1 te bereiken, wordt alldoorgaans gedefinieerd als een .PHONY-doel dat afhangt van de uitvoerbare bestanden die het hele programma vormen:

.PHONY : all
all : executable

Om 2 allte bereiken, moet dit ofwel het eerste doel zijn dat is gedefinieerd in het make-bestand, of het moet worden toegewezen als het standaarddoel:

.DEFAULT_GOAL := all

Antwoord 3, autoriteit 2%

Het doel “alle” is een voorbeeld van een dummy doel – er staat niets op de schijf dat “alles” heet. Dit betekent dat wanneer je een “make all” doet, make altijd denkt dat het nodig is om het te bouwen, en dus alle commando’s voor dat doel uitvoert. Die commando’s zijn meestal degenen die alle eindproducten bouwen waarvan de makefile weet, maar het zou alles kunnen doen.

Andere voorbeelden van dummy-doelen zijn ‘opschonen’ en ‘installeren’, en ze werken op dezelfde manier.

Als je het nog niet hebt gelezen, lees dan de GNU Make Manual, wat ook een uitstekende tutorial is.


Antwoord 4, autoriteit 2%

Ik weet niet zeker of het voor iets speciaals staat. Het is gewoon een conventie dat je een ‘alles’-regel opgeeft, en over het algemeen wordt deze gebruikt om alle subdoelen op te sommen die nodig zijn om het hele project te bouwen, vandaar de naam ‘alle’. Het enige speciale eraan is dat mensen het vaak als het eerste doel in de makefile plaatsen, wat betekent dat alleen het typen van ‘make’ hetzelfde zal doen als ‘make all’.

Other episodes