如何突出make输出中的警告和错误行?

时间:2011-06-22 07:46:04

标签: bash shell makefile gnu-make

有时,make的输出会填满屏幕。识别所有警告和错误消息行有点困难。我知道可能有壳颜色输出可以帮助任何人都可以帮助我吗?

7 个答案:

答案 0 :(得分:37)

查看colormake,找到here

$ apt-cache search colormake
colormake - simple wrapper around make to colorize output

利用谷歌的力量,我也发现了这个bash功能。

make()
{
  pathpat="(/[^/]*)+:[0-9]+"
  ccred=$(echo -e "\033[0;31m")
  ccyellow=$(echo -e "\033[0;33m")
  ccend=$(echo -e "\033[0m")
  /usr/bin/make "$@" 2>&1 | sed -E -e "/[Ee]rror[: ]/ s%$pathpat%$ccred&$ccend%g" -e "/[Ww]arning[: ]/ s%$pathpat%$ccyellow&$ccend%g"
  return ${PIPESTATUS[0]}
}

答案 1 :(得分:17)

我已经来到这个问题,寻找一个颜色化make输出的解决方案然后记得一段时间我已经研究了一个好的通用日志着色器并找到了ccze。它适用于我从Minecraft服务器日志到Exim MTA的任何东西。

make | ccze -A

注意:指定-A选项可以启用' raw-ansi'否则一些输出被清除'在我的经验结束时。 enter image description here

答案 2 :(得分:7)

如果您是emacs用户,则可以使用命令M-x compile。这会将make输出放在突出显示的缓冲区中,错误充当源代码中相关行的链接。

答案 3 :(得分:3)

只是另一个bash函数,非常简洁

make()
{
  /usr/bin/make "$@" 2>&1 | sed -E -e "s/error/ $(echo -e "\\033[31m" ERROR "\\033[0m"/g)"   -e "s/warning/ $(echo -e "\\033[0;33m" WARNING "\\033[0m"/g)"
  return ${PIPESTATUS[0]}
}

答案 4 :(得分:3)

以下情况如何?

colored output of make

它由简化版this Makefile生成。

Change

它假设所有C ++源文件都在PROJECT = programname SHELL = /bin/bash OBJS = $(patsubst src/%.cc,obj/%.o,$(wildcard src/*.cc)) RESET = \033[0m make_std_color = \033[3$1m # defined for 1 through 7 make_color = \033[38;5;$1m # defined for 1 through 255 WRN_COLOR = $(strip $(call make_std_color,3)) ERR_COLOR = $(strip $(call make_std_color,1)) STD_COLOR = $(strip $(call make_color,8)) COLOR_OUTPUT = 2>&1 | \ while IFS='' read -r line; do \ if [[ $$line == *:[\ ]error:* ]]; then \ echo -e "$(ERR_COLOR)$${line}$(RESET)"; \ elif [[ $$line == *:[\ ]warning:* ]]; then \ echo -e "$(WRN_COLOR)$${line}$(RESET)"; \ else \ echo -e "$(STD_COLOR)$${line}$(RESET)"; \ fi; \ done; exit $${PIPESTATUS[0]}; .PHONY: $(PROJECT) $(PROJECT): bin/$(PROJECT) bin/$(PROJECT): $(OBJS) @mkdir -p bin @echo g++ -o $@ $(OBJS) -Iinclude @g++ -o $@ $(OBJS) -Iinclude $(COLOR_OUTPUT) obj/%.o: src/%.cc @mkdir -p obj @echo g++ -o $@ -c $< -Wall -Wextra @g++ -o $@ -c $< -Wall -Wextra $(COLOR_OUTPUT) 目录(扩展名.cc)中,而头文件位于src目录中。

答案 5 :(得分:1)

我曾经使用multitail作为日志文件,它可以根据各种标准突出显示(和过滤)行。

答案 6 :(得分:0)

在Mac上,它通过在错误字符串周围打印tput颜色代码来工作。

export tput个颜色代码如下:

export red=`tput setaf 1`
export reset=`tput sgr0`

然后,将目标添加到Makefile中,如下所示:

...
check-env:
ifndef ENV
    $(error ${red}ENV is undefined. Please export it using command [ export ENV=dev ]${reset})
endif
...

然后,以make check-env

运行

屏幕截图-enter image description here