2012-08-14 42 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