GCC y makefile: solo mostrar errores y advertencias

2 minutos de lectura

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. Esta es la salida de ejemplo para un archivo:

arm-none-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 salidas de comandos. ¿Hay alguna manera de solo imprimir las advertencias y errores que aparecen (no el comando original)?

Ejecutar make con el -s opción. Desde el página man.

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

avatar de usuario de mrucci
mrucci

Simplemente anteponga el comando con el @ símbolo.

si confías en reglas implícitas incorporadastendrás que hacerlos explícitos o, en tu caso concreto, podrías utilizar:

.SILENT: *.o

para silenciar todos los comandos utilizados para la construcción de la %.o objetivos

  • En lugar de (o además de) usar @tu puedes hacer MAKEFLAGS += --quiet. Eso también funcionará para las reglas integradas.

    – Idélico

    14 de agosto de 2012 a las 19:22


  • si, pero entonces cada mando en cada la regla no se repetirá.

    – mrucci

    14/08/2012 a las 20:20

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

    – Idélico

    14 de agosto de 2012 a las 22:36


  • Quizas el .SILENT la solución es mejor?

    – mrucci

    14 de agosto de 2012 a las 23:18

Siempre puede filtrar toda la salida de stdoutque debería dejarte con todos los errores en stderr:

make 1>/dev/null

Usar @ antes de un comando para ocultarlo:

rule1:
  @gcc someting

¿Ha sido útil esta solución?