2012-08-14 11 views
11

Ho un makefile che compila ogni file .c nel mio progetto. Per ogni file, ottengo l'intero comando di compilazione stampato sulla shell, con tutte le opzioni e le flag. Questa è l'uscita esempio per un file:GCC e makefile: mostra solo errori e avvisi

braccio-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

Il problema è che i vari avvertimenti perdersi dentro questa confusione di uscite di comando. C'è un modo per solo stampare gli avvisi e gli errori visualizzati (non il comando originale)?

risposta

6

Basta anteporre il comando con the @ symbol.

Se si basano su built-in implicit rules, si dovrà farli esplicita o, nel caso specifico, è possibile utilizzare:

.SILENT: *.o 

per tacere tutti i comandi utilizzati per la costruzione delle %.o obiettivi.

+4

Invece di (o in aggiunta a) usando '@', si può fare 'MAKEFLAGS + = --quiet'. Ciò funzionerà anche per le regole integrate. – Idelic

+0

Sì, ma poi ** ogni ** comando in ** ogni ** regola non verrà echeggiato. – mrucci

+0

Come sempre, è una compensazione, ma gestisce le regole integrate. In generale, rendere esplicite le regole incorporate è una pessima idea, quindi impostare 'MAKEFLAGS' potrebbe essere un metodo migliore. O no, ovviamente. – Idelic

3

Usa @ prima di un comando per nascondere l'esso:

rule1: 
    @gcc someting 
19

Eseguire make con l'opzione -s. Da man page.

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

Si può sempre filtrare tutti l'uscita dal stdout, che dovrebbe lasciare con tutti gli errori sul stderr:

make 1>/dev/null 
Problemi correlati