Cosa fa il seguente in un Makefile?Cosa significa @: (al simbolo del colon) in un Makefile?
rule: $(deps)
@:
Non riesco a trovare questo nel manuale della marca.
Cosa fa il seguente in un Makefile?Cosa significa @: (al simbolo del colon) in un Makefile?
rule: $(deps)
@:
Non riesco a trovare questo nel manuale della marca.
Significa "non eseguire questo comando sull'output". Quindi questa regola dice "esegui il comando shell :
e non fai eco all'output
Ovviamente il comando shell :
è un no-op, quindi questo è dire" non fare niente e non dirlo ".
Perché?
il trucco è che hai un oscuro combinazione di due sintassi differenti. il make (1) sintassi è l'uso di un'azione inizia con @, che è semplicemente non per echeggiare il comando, quindi una regola come
always:
@echo this always happens
non emette
echo this always happens
this always happens
Ora, la parte azione di una regola può essere qualsiasi comando shell, tra cui :
. Bash aiuto spiega questo così come da nessuna parte:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Per quelli curiosi di sapere il motivo per cui si potrebbe fare questo, è utile se si desidera far finta come se qualcosa è stato fatto, in modo che la rendono non emette "Niente di essere fatto per "il tuo obiettivo.
Un esempio è se si dispone di una destinazione fasulla che si esegue sempre, e in essa si dispone di un gruppo di condizionali nel comando. Vuoi avere almeno qualcosa nel caso in cui quelle condizioni si rivelino false e non viene fatto nulla.
Per esempio (da 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
@:
Ah ah, ecco fatto! –
grazie, è lì da qualche parte che descrive più in dettaglio? Non sono sicuro di cosa sia l'out-ut. – cdwilson
Non prendere in giro la mia battitura, anche tu sarai vecchio un giorno. –
Grazie, è stato davvero utile! Fino a quando ho letto la tua risposta, stavo pensando che '@:' era un divertente makeism (non avevo capito che era una combinazione di due cose ...) – cdwilson