Que fait ce qui suit dans un Makefile?
rule: $(deps)
@:
Je n'arrive pas à trouver cela dans le manuel de fabrication.
Que fait ce qui suit dans un Makefile?
rule: $(deps)
@:
Je n'arrive pas à trouver cela dans le manuel de fabrication.
Il signifie "ne pas faire écho à cette commande sur la sortie." Si cette règle est de dire "exécuter la commande shell :
et de ne pas l'écho de la sortie.
Bien sûr, la commande shell :
est un no-op, c'est donc en disant: "ne faites rien, ne dites pas."
Pourquoi?
L'astuce ici est que vous avez un obscur combinaison des deux syntaxes différentes. Le faire(1) la syntaxe est l'utilisation d'une action en commençant par @, qui est tout simplement de ne pas l'écho de la commande. Donc une règle de
always:
@echo this always happens
ne pas émettre de
echo this always happens
this always happens
Maintenant, l'action fait partie d'une règle peut être toute commande shell, y compris :
. Bash aider l'explique ainsi que n'importe où:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Pour ceux qui sont curieux de savoir pourquoi vous pourriez faire cela, il est utile de prétendre que quelque chose a été fait, pour que Make ne génère pas "Rien à faire pour" votre cible.
Par exemple, si vous avez une cible fictive que vous exécutez toujours et que vous y avez un ensemble de conditions dans la commande. Vous voulez avoir au moins quelque chose au cas où ces conditions seraient fausses et que rien ne soit fait.
Par exemple (à partir des scripts de 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
@:
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.