145 votes

Que signifie @: (au symbole deux points) dans un fichier Makefile?

Que fait ce qui suit dans un Makefile?

 rule: $(deps)
    @:
 

Je n'arrive pas à trouver cela dans le manuel de fabrication.

189voto

Charlie Martin Points 62306

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.

38voto

Guestolio Points 101

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.com

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.

Powered by:

X