run configurar makefile

configurar - makefile windows



Suprime los mensajes en make clean(Makefile silent remove) (5)

Me pregunto cómo puedo evitar un poco de eco en un Makefile:

clean: rm -fr *.o

esta regla se imprimirá:

$>make clean rm -fr *.o $>

¿Cómo puedo evitar eso?


De hecho, estaba buscando algo más, agregando esta línea al Makefile:

.SILENT:clean

mientras ejecuta cada paso del objetivo "limpio" en silencio.

Hasta que alguien señale algún inconveniente a esto, ¡lo utilizo como mi solución favorita!


Del manual:. .SILENT es esencialmente obsoleto ya que @ es más flexible.

Mucho peor es que las copias imprimen demasiada información. Los mensajes de advertencia / error / privado están ocultos en la salida. Por otro lado -s ( .SILENT ) suprime cualquier cosa. Especialmente los mensajes de "nada por hacer" y "actualizado" pueden ser dolorosos. No hay opción para suprimirlos. Tienes que filtrarlos activamente o usar algo como colormake . Aquí hay una solución para grep :

make | egrep -hiv ''nothing to be done|up to date''

Pero la salida tendrá números de línea. La solución de Perl es, por lo tanto, mejor, porque suprime los números de línea y vacía inmediatamente la salida estándar:

make | perl -ne ''$|=1; print unless /nothing to be done|up to date/i''

Haz una herramienta defectuosa. "¿Qué está mal con GNU make?" explica esto mejor que yo.


Estoy respondiendo a este tema antiguo porque aparece muy alto en la búsqueda y las respuestas son confusas. Para hacer exactamente lo que el usuario quiere, todo lo que se necesita es:

clean: @rm -f *.o

El @ significa que make no hará eco de ese comando. El argumento -f a rm le dice a rm que ignore cualquier error, como que no haya archivos *.o , y que siempre tenga éxito.

Eliminé el -r del ejemplo de OP, porque significa recursivo y aquí estamos simplemente registrando archivos .o , nada que recurse.

No es necesario el 2>&1 >/dev/null porque con el -f no habrá errores impresos.

.SILENT: clean

funciona en lugar del @ , pero no está en el mismo lugar en el archivo Makefile que el comando que afecta, por lo que alguien que mantenga el proyecto más tarde podría estar confundido. Es por eso que @ es preferido. Es mejor localidad de referencia.


Para empezar: el comando real debe estar en la siguiente línea (o al menos ese es el caso con GNU Make, podría ser diferente con otros Make''s - No estoy seguro de eso)

clean: rm -rf *.o

(tenga en cuenta que necesita una TAB antes de rm -rf *.o como en cada regla)

Hacerlo silencioso se puede hacer prefijando un @ :

para que tu archivo MAKE se convierta

clean: @rm -rf *.o

Si no hay archivos *.o para eliminar, puede terminar con un mensaje de error. Para suprimir estos, agregue lo siguiente

clean: -@rm -rf *.o 2>/dev/null || true

  • 2>/dev/null canaliza cualquier mensaje de error a / dev / null - por lo que no verá ningún error
  • el - enfrente del comando se asegura de que make ignore un código de retorno distinto de cero

Si coloca una @ delante del comando, no se refleja en el intérprete de comandos. Intenta cambiar rm a @rm. ( Reference )