¿Qué hacen @, - y + como prefijos de las líneas de recetas en Make?

Resuelto Matt Joiner asked hace 14 años • 2 respuestas

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?

Matt Joiner avatar Aug 13 '10 20:08 Matt Joiner
Aceptado

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 bajo make -n' (o 'make -t' o 'make -q') cuando los comandos no se ejecutan normalmente. Consulte también la especificación POSIX makey 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 +).

Jonathan Leffler avatar Aug 13 '2010 13:08 Jonathan Leffler

@evita que la línea de comando resuene en la consola. Puedes hacerlo globalmente con -so--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 -ibandera (o --ignore-errors).

+No lo conocía antes de que me lo preguntaras. Por lo que puedo decir, niega el efecto de -n, -ty -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".

T.E.D. avatar Aug 13 '2010 13:08 T.E.D.