¿Qué hacen @, - y + como prefijos de las líneas de recetas en Make?
En el manual GNU Makefile, menciona estos prefijos.
Si se proporciona .ONESHELL, solo se verificará la primera línea de la receta para detectar los caracteres de prefijo especiales ("@", "-" y "+").
¿Qué hacen estos prefijos y dónde se mencionan?
Controlan el comportamiento de make para las líneas de comando etiquetadas:
@
suprime el 'eco' normal del comando que se ejecuta.-
significa ignorar el estado de salida del comando que se ejecuta (normalmente, un estado de salida distinto de cero detendría esa parte de la compilación).+
significa 'ejecutar este comando bajomake -n
' (o 'make -t' o 'make -q') cuando los comandos no se ejecutan normalmente. Consulte también la especificación POSIXmake
y también el §9.3 del manual GNU Make.
La +
notación es una generalización (estandarizada en POSIX) del mecanismo de facto (no estandarizado) mediante el cual una línea de comando que contiene ${MAKE}
o $(MAKE)
se ejecuta bajo make -n
.
( @
se analiza en la sección 5.2 del manual GNU Make; -
se describe en la sección 5.5 ; y la sección 5.7.1 menciona el uso de +
).
@
evita que la línea de comando resuene en la consola. Puedes hacerlo globalmente con -s
o--keep-silent
-
le dice a make que continúe, incluso si el comando falla por algún motivo. Puedes hacerlo globalmente a través de la -i
bandera (o --ignore-errors
).
+
No lo conocía antes de que me lo preguntaras. Por lo que puedo decir, niega el efecto de -n
, -t
y -q
, todo lo cual básicamente le dice a make que no ejecute los comandos. +
Entonces, de todos modos se ejecutaría una línea con a al frente.
Si lee el manual oficial de Gnu Make, todos se mencionan en el Capítulo 5 . En mi copia anterior del manual ese era el capítulo sobre "comandos", pero el término del día ahora parece ser "recetas".