2011-08-31 16 views
25

Ho un makefile che crea un progetto composto da molti file che devono essere tutti compilati.Elimina tutti i tipi di output tranne errori e avvisi

Per rendere le cose più complicate, ho un certo numero di directory incluse in ogni chiamata a gcc (in modo che ogni chiamata a gcc guarda a lungo sulla riga di comando).

vorrei sopprimere tutto l'output ad eccezione di errori e avvisi (in modo che io possa effettivamente vederli quando make piste!)

Esiste un modo per fare questo?

+1

@ pst tu sei l'uomo! Si prega di inviare una risposta in modo da poter contrassegnare come accettato. BTW ... si fa a sapere se c'è un modo per fare questo dal makefile in modo che il comando 'make' rimane straight-forward? – Steve

risposta

10

A seconda di come "errori e avvisi" sono riportati ...

make > /dev/null 

che reindirizza tutte STDOUT (uscita standard) dal comando make (e quindi tutti i sotto-processi depone le uova) per l'infinito bit-bucket of nothingness. Questo potrebbe essere troppo avido, dato che alcuni programmi usano STDOUT (e non STDERR) per segnalare gli avvertimenti.

Io non conosco un modo cambiano globalmente STDOUT di tutti i sotto-processi all'interno del contesto del Makefile stesso.

Felice codifica.

+0

Grazie !! Questo è proprio quello di cui avevo bisogno. (Funziona perfettamente con gcc) – Steve

23

"make -s" dovrebbe fare quello che stai cercando un po 'più ordinatamente. Non conosco un modo per forzarlo sui makefile, ma il manuale GNU potrebbe averne uno.

In mancanza di questo si potrebbe verificare il sistema di compilazione del kernel di Linux, dal momento che sembra nascondere automaticamente stdout.

Speranza che aiuta, Paul

+0

Eccellente, esattamente quello di cui avevo bisogno –

19

Con l'aggiunta di un "@" per la parte anteriore di un comando, la stringa di riga di comando è soppressa esempio da

$(addprefix $(OUTPUT_PATH)/,$(C_OBJ)): $(OUTPUT_PATH)/%.o: %.c 
     $(CC) -c $(CFLAGS) $< -o [email protected] 

a

$(addprefix $(OUTPUT_PATH)/,$(C_OBJ)): $(OUTPUT_PATH)/%.o: %.c 
     @$(CC) -c $(CFLAGS) $< -o [email protected] 

avrà

make[1]: Entering directory `.../libraries/libgcdc/build' 
/home/crowe/arm-tools/gcc-arm-none-eabi-4_6-2012q2/bin/arm-none-eabi-gcc -c -Wall -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Werror-implicit-function-declaration -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mcpu=cortex-m3 -mthumb -mlong-calls -ffunction-sections -g -O0 -D DEBUG -I.. -I../include -I../../libchip_sam3s -I../../libboard_arm_demo -I../../libboard_generic -I../../libusb/include -Dsam3s4 -DTRACE_LEVEL=5 -Dprintf=iprintf ../source/hid_callbacks.c -o debug_sam3s_svn2/hid_callbacks.o 
make[1]: Leaving directory ` .../libraries/libgcdc/build' 

a

make[1]: Entering directory `.../libraries/libgcdc/build' 
make[1]: Leaving directory `.../libraries/libgcdc/build' 
12

Si può anche forzare l'opzione -s come suggerito da PaulW directl y nel Makefile. Basta aggiungere:

.SILENT: 
Problemi correlati