Cosa significa "all" in un makefile?


105

Ho letto alcuni tutorial sui Makefile ma per me non è ancora chiaro cosa significhi il target "all" e cosa faccia.

Qualche idea?

Risposte:


116

Una build, come la intende Makefile, consiste di molti obiettivi. Ad esempio, per costruire un progetto potresti aver bisogno

  1. Crea file1.o da file1.c
  2. Crea file2.o da file2.c
  3. Crea file3.o da file3.c
  4. Crea eseguibile1 da file1.o e file3.o
  5. Crea eseguibile2 da file2.o

Se hai implementato questo flusso di lavoro con makefile, potresti creare ciascuno degli obiettivi separatamente. Ad esempio, se hai scritto

make file1.o

creerebbe solo quel file, se necessario.

Il nome di allnon è fisso. È solo un nome convenzionale; alltarget denota che se lo invocate, make costruirà tutto ciò che è necessario per fare una build completa . Questo di solito è un target fittizio, che non crea alcun file, ma dipende semplicemente dagli altri file. Per l'esempio sopra, la creazione di tutto il necessario è la creazione di eseguibili, gli altri file vengono inseriti come dipendenze. Quindi nel makefile assomiglia a questo:

all: executable1 executable2

alltarget è solitamente il primo nel makefile, poiché se scrivi solo makenella riga di comando, senza specificare il target, costruirà il primo target. E ti aspetti che lo sia all.

alldi solito è anche un .PHONYobiettivo. Scopri di più qui .


31

Il manuale di GNU Make fornisce una chiara definizione allnel suo elenco di obiettivi standard .

Se l'autore del Makefile segue tale convenzione, il target alldovrebbe:

  1. Compilare l'intero programma, ma non creare la documentazione.
  2. Sii l'obiettivo predefinito. Come in esecuzione, makedovresti fare lo stesso di make all.

Raggiungere 1 allè tipicamente definito come un .PHONYobiettivo che dipende dagli eseguibili che formano l'intero programma:

.PHONY : all
all : executable

Per raggiungere 2 alldovrebbe essere il primo obiettivo definito nel file make o essere assegnato come obiettivo predefinito:

.DEFAULT_GOAL := all

3

Non sono sicuro che stia per qualcosa di speciale. È solo una convenzione fornire una regola "all" e generalmente viene utilizzata per elencare tutti i sub-target necessari per costruire l'intero progetto, da cui il nome "all". L'unica cosa speciale è che spesso le persone lo inseriscono come primo obiettivo nel makefile, il che significa che semplicemente digitando "make" da solo farà la stessa cosa di "make all".


2

Il target "all" è un esempio di target fittizio - non c'è niente sul disco chiamato "all". Ciò significa che quando si esegue un "make all", make pensa sempre di doverlo compilare, quindi esegue tutti i comandi per quel target. Questi comandi saranno tipicamente quelli che costruiscono tutti i prodotti finali di cui il makefile conosce, ma potrebbe fare qualsiasi cosa.

Altri esempi di target fittizi sono "clean" e "install" e funzionano allo stesso modo.

Se non l'hai ancora letto, dovresti leggere il GNU Make Manual , che è anche un eccellente tutorial.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.