2012-08-14 17 views
11

Tengo un archivo MAKE que compila todos los archivos .c de mi proyecto. Para cada archivo, obtengo el comando de compilación completo impreso en el shell, con todas las opciones y banderas. Este es el ejemplo de salida para un archivo:GCC y makefile: mostrar solo errores y advertencias

brazo-ninguno-EABI-gcc -c -mcpu = Cortex-M3 -O0 -dM -g -gdwarf-2 -mthumb -fomit-frame-pointer - fverbose-asm -Wa, -ahlms = src/sim/sim_configuration.lst -include ./lib/stm32core/stm32f2xx_conf.h -I. -I./lib/ARMStandardLibrary -I./lib/LwIP -I./lib/LwIP/src/include -I./lib/LwIP/src/include -I./lib/LwIP/src/include/ipv4 -I./lib/LwIP/src/include/ipv6 -I./lib/FatFS -I./lib/stm32core -I./src -I./src/sim -I./src/sd -I./ src/TFTP src/SIM/sim_configuration.c -o src/SIM/sim_configuration.o

El problema es que varias advertencias se pierden dentro de todo este lío de las salidas de comando. ¿Hay alguna manera de solo imprimir las advertencias y errores que aparecen (no el comando original)?

Respuesta

6

Simplemente anteponga el comando con the @ symbol.

Si depende de built-in implicit rules, tendrá que hacerlas explícitas o, en su caso específico, se puede utilizar:

.SILENT: *.o 

para silenciar todos los comandos que se utilizan para la construcción de los %.o objetivos.

+4

En lugar de (o además de) el uso de '@', puede hacerlo 'MAKEFLAGS + = --quiet'. Eso funcionará para las reglas incorporadas también. – Idelic

+0

Sí, pero luego ** cada ** comando en ** cada ** regla no se repetirá. – mrucci

+0

Como siempre, es una compensación, pero maneja las reglas incorporadas. En general, hacer que las reglas incorporadas sean explícitas es una muy mala idea, por lo que configurar 'MAKEFLAGS' puede ser un mejor método. O no, por supuesto. – Idelic

3

Uso @ antes de que un comando para ocultar el que:

rule1: 
    @gcc someting 
19

Ejecutar make con la opción -s. Desde el man page.

-s, --silent, --quiet 
    Silent operation; do not print the commands as they are executed. 
4

Siempre se puede filtrar toda la salida de stdout, que debe salir con todos los errores en stderr:

make 1>/dev/null 
Cuestiones relacionadas