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

172

En el manual de GNU Makefile, menciona estos prefijos.

Si se proporciona .ONESHELL, solo se comprobará la primera línea de la receta para los caracteres de prefijo especiales ('@', '-' y '+').

¿Qué hacen estos prefijos y dónde se mencionan?

Matt Joiner
fuente

Respuestas:

235

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 para makey también §9.3 del manual de GNU Make.

La +notación es una generalización (estandarizada por 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 discute en §5.2 del manual GNU Make; -se describe en §5.5 ; y §5.7.1 menciona el uso de +).

Jonathan Leffler
fuente
41

@evita que la línea de comando se repita en la consola. Puedes hacerlo globalmente con -so--keep-silent

-le dice a make que continúe, incluso si el comando falla por alguna razón. Puede hacerlo globalmente a través de la -ibandera (o --ignore-errors).

+No estaba familiarizado antes de que 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. Por lo tanto, una línea con un +frente se ejecutaría de todos modos.

Si lees el manual oficial de Gnu Make, todos se mencionan en el Capítulo 5 . En mi antigua copia del manual que era el capítulo sobre "comandos", pero el término du jour ahora parece ser "recetas".

TED
fuente