Risposte:
Significa "non fare eco a questo comando sull'output". Quindi questa regola dice "esegui il comando shell :
e non fare eco all'output.
Ovviamente il comando shell :
è no-op, quindi questo sta dicendo "non fare nulla e non dirlo".
Perché?
Il trucco qui è che hai una combinazione oscura di due diverse sintassi. La sintassi di make (1) è l'uso di un'azione che inizia con @, che semplicemente non fa eco al comando. Quindi una regola come
always:
@echo this always happens
non emetterà
echo this always happens
this always happens
Ora, la parte azione di una regola può essere qualsiasi comando shell, incluso :
. Bash help spiega questo e ovunque:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
@:
(non solo @
), oltre alla risposta di @ guestolio potrebbe anche essere uno stub avanzato dallo sviluppo. È come scrivere una funzione in Python che contiene solo pass
. Può essere utile per stubbing blocchi di codice per copia / incolla, ma generalmente non dovrebbero esistere a lungo. In questo modo il file verrebbe comunque compilato, superato la sfilacciatura, ecc.
Per coloro che sono curiosi di sapere perché potresti farlo, è utile se vuoi far finta che qualcosa sia stato fatto, in modo che Make non produca "Nulla da fare per" il tuo obiettivo.
Un esempio è se hai un obiettivo falso che esegui sempre e in esso hai un sacco di condizionali nel comando. Volete avere almeno qualcosa nel caso in cui tali condizioni risultino false e nulla venga fatto.
Ad esempio (dagli script di Linux / Makefile.clean):
__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
+$(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
+$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
+$(clean-rule)
endif
@: