Que font @, – et + comme préfixes pour les 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?

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 exécutée (normalement, un état de sortie non nul arrêterait cette partie de la génération).

  • + 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 pour make et aussi §9.3 du manuel GNU Make.

La notation + est une généralisation (normalisée par POSIX) du mécanisme de facto (non normalisé) 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 + .)

@ 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 drapeau -i (ou --ignore-errors ).

+ Je n’étais pas familier avant de vous demander. Aussi proche que je puisse le dire, cela annule les effets de -n , -t et -q , qui disent tous que make ne doit pas réellement exécuter 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, il y avait le chapitre sur les “commandes”, mais le terme du jour semble maintenant être des “recettes”.