web-dev-qa-db-fra.com

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

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

Si .ONESHELL est fourni, 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?

157
Matt Joiner

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

  • @ Supprime l'écho normal de la commande qui est exécutée.

  • - Signifie ignorer l'état de sortie de la commande qui est exécutée (normalement, un état 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 également la spécification POSIX pour make et aussi §9. du manuel GNU Make).

La notation + Est une généralisation (normalisée POSIX) du mécanisme de facto (non normalisé) par lequel une ligne de commande contenant ${MAKE} Ou $(MAKE) s'exécute sous make -n.

(@ Est discuté dans §5.2 du GNU Make manual; - Est décrit dans §5.5 ; et §5.7.1 mentionne l'utilisation de +.)

205
Jonathan Leffler

@ empêche la ligne de commande de résonner sur la console. Vous pouvez le faire globalement avec -s ou --keep-silent

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

+ Je ne vous connaissais pas bien avant de demander. Pour autant que je sache, cela annule l'effet de -n, -t, et -q, qui indiquent essentiellement à make de ne pas réellement exécuter les commandes. Donc, une ligne avec un + à l'avant serait exécuté de toute façon.

Si vous lisez le manuel officiel de Gnu Make, ils sont tous mentionnés dans Chapitre 5 . Dans mon ancien exemplaire du manuel qui était le chapitre sur les "commandes", mais le terme du jour semble désormais être "recettes".

37
T.E.D.