Ho letto alcuni tutorial sui Makefile ma per me non è ancora chiaro cosa significhi il target "all" e cosa faccia.
Qualche idea?
Ho letto alcuni tutorial sui Makefile ma per me non è ancora chiaro cosa significhi il target "all" e cosa faccia.
Qualche idea?
Risposte:
Una build, come la intende Makefile, consiste di molti obiettivi. Ad esempio, per costruire un progetto potresti aver bisogno
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 all
non è fisso. È solo un nome convenzionale; all
target 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
all
target è solitamente il primo nel makefile, poiché se scrivi solo make
nella riga di comando, senza specificare il target, costruirà il primo target. E ti aspetti che lo sia all
.
all
di solito è anche un .PHONY
obiettivo. Scopri di più qui .
Il manuale di GNU Make fornisce una chiara definizione all
nel suo elenco di obiettivi standard .
Se l'autore del Makefile segue tale convenzione, il target all
dovrebbe:
make
dovresti fare lo stesso di make all
.Raggiungere 1 all
è tipicamente definito come un .PHONY
obiettivo che dipende dagli eseguibili che formano l'intero programma:
.PHONY : all
all : executable
Per raggiungere 2 all
dovrebbe essere il primo obiettivo definito nel file make o essere assegnato come obiettivo predefinito:
.DEFAULT_GOAL := all
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".
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.