Que font @, - et + comme préfixes aux lignes de recette dans Make?

172

Dans le manuel GNU Makefile, il mentionne ces préfixes.

Si .ONESHELL est fourni, alors seule la première ligne de la recette sera vérifiée pour les caractères de préfixe spéciaux ('@', '-' et '+').

Que font ces préfixes et où sont-ils mentionnés?

Matt Joiner
la source

Réponses:

235

Ils contrôlent le comportement de make pour les lignes de commande balisées:

  • @ supprime l '«écho» normal de la commande exécutée.

  • - signifie ignorer le statut de sortie de la commande qui est exécutée (normalement, un statut de sortie différent de zéro arrêterait cette partie de la construction).

  • +signifie 'exécuter cette commande sous make -n' (ou 'make -t' ou 'make -q') lorsque les commandes ne sont pas normalement exécutées. Voir aussi la spécification POSIX makeet aussi le §9.3 du manuel GNU Make.

La +notation est une généralisation (standardisée POSIX ) du mécanisme de facto (non standardisé) par lequel une ligne de commande contenant ${MAKE}ou $(MAKE)est exécutée sous make -n.

( @est discuté au §5.2 du manuel GNU Make; -est décrit au §5.5 ; et le §5.7.1 mentionne l'utilisation de +.)

Jonathan Leffler
la source
41

@empêche la ligne de commande de se répercuter sur la console. Vous pouvez le faire globalement avec -sou--keep-silent

-dit à make de continuer, même si la commande échoue pour une raison quelconque. Vous pouvez le faire globalement via le -idrapeau (ou --ignore-errors).

+Je n'étais pas familier avec avant que vous ne demandiez. Pour autant que je sache, il annule l'effet de -n, -tet -q, qui tous disent essentiellement faire de ne pas exécuter réellement les commandes. Donc, une ligne avec un +à l'avant serait exécutée de toute façon.

Si vous lisez le manuel officiel de Gnu Make, ils sont tous mentionnés au chapitre 5 . Dans mon ancien exemplaire du manuel, c'était le chapitre sur les "commandes", mais le terme du jour semble maintenant être des "recettes".

TED
la source