2012-08-14 43 views
11

我有一個編譯我的項目中的每個.c文件的生成文件。對於每個文件,我都將整個編譯命令打印到shell中,並帶有所有選項和標誌。這是針對一個文件的輸出例子:GCC和makefile:只顯示錯誤和警告

臂-NONE-EABI-GCC -c -mcpu =皮質-立方米-O0 -dM -g -gdwarf-2 -mthumb -fomit幀指針 - 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/sim/sim_configuration.c -o src/sim/sim_configuration.o

問題在於,在整個命令輸出亂七八糟的各種警告消失了。有沒有辦法只有打印出現的警告和錯誤(不是原始命令)?

回答

6

只需在the @ symbol之前加上命令即可。

如果依靠built-in implicit rules,你必須讓他們明確,或在特定情況下,你可以使用:

.SILENT: *.o 

沉默用於爲建設%.o目標的所有命令。

+4

代替(或補充)使用'@',你可以做'MAKEFLAGS + = --quiet'。這也適用於內置規則。 – Idelic 2012-08-14 19:22:07

+0

是的,但是** **每條**規則中的**每個**命令都不會被回顯。 – mrucci 2012-08-14 20:20:15

+0

一如既往,這是一種折衷,但它處理內置的規則。一般來說,明確制定內置規則是一個非常糟糕的主意,因此設置MAKEFLAGS可能是更好的方法。當然,不是。 – Idelic 2012-08-14 22:36:08

3

使用@命令之前隱藏它:

rule1: 
    @gcc someting 
19

-s選項執行make。來自man page

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

你總是可以過濾所有的輸出stdout,這應該離開你所有的錯誤上stderr

make 1>/dev/null