Potete chiamarli shirley
se ti piace; nessuna delle etichette che menzioni ha una semantica speciale. Il comportamento predefinito di make
consiste nell'eseguire la prima destinazione nello Makefile
se non si specifica una destinazione come argomento della riga di comando. Se desideri ignorare questo comportamento, c'è il target speciale .DEFAULT:
.
C'è una convenzione per avere un target denominato all
che crea tutto, ma questa è solo una convenzione umana, non un caso speciale o un requisito per quanto riguarda Make.
Analogamente, esiste una (debole) convenzione per chiamare il target predefinito default
, ma allo stesso modo, questa è solo un'etichetta umana (e in qualche modo si sovrappone ed è eventualmente in conflitto con la convenzione all
).
Così il seguente Makefile fa esattamente la stessa cosa:
.PHONY: shirley all default
default: hello
all: hello
shirley: hello
hello: hello.cpp
# (Make already knows how to build an executable out of a .cpp file)
È possibile omettere alcuni o tutti gli obiettivi falsi di cui sopra, e l'unica differenza sarà che gli esseri umani non saranno in grado di dire quando make shirley
loro (efficacemente) significano make hello
.
Linea di fondo: Costruisci il tuo Makefile in modo che make
fa quello che una ragionevole per l'utente finale si aspetta senza leggere troppo README
file o ispezione dello Makefile
. Spesso questo sarà make all
(e probabilmente dovresti avere un target con questo nome, solo per soddisfare le convenzioni umane, anche se non è l'impostazione predefinita), ma questo ovviamente dipende dal tuo progetto e dalle aspettative dei tuoi utenti.
Non chiamarmi Shirley.
Specificare il target speciale '.DEFAULT' è ** non ** il modo per sovrascrivere l'obiettivo predefinito.L'obiettivo predefinito è la prima regola nel makefile che non inizia con '.' - a meno che non venga sovrascritto specificando la variabile speciale '.DEFAULT_GOAL'. Per informare il lettore di un lunghissimo makefile, è meglio specificare .DEFAULT_GOAL o scrivere una regola (in genere una regola fittizia come 'default: all' senza ricetta) molto presto nel makefile. –
@DavidHammen Sono d'accordo con la tua conclusione finale. Tuttavia, considererei l'hacking di ".DEFAULT_GOAL" come una sorta di back door esoterico che dovrebbe forse essere evitato, e [il manuale] (https://www.gnu.org/software/make/manual/html_node/Special-Variables. html) esempio di come si usa sicuramente rafforza questa impressione. – tripleee