有时候,make的输出会填满屏幕。要识别所有的警告和错误消息行有点困难。我知道shell颜色输出可能会有帮助。有人能帮我吗?
zpqajqem1#
看一下colormake,找到了here
colormake
$ 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]} }
lndjwyie2#
我已经来到这个问题寻找一个解决方案来着色make输出,然后记得前一段时间我已经研究了一个很好的通用日志着色器,并发现ccze。它的工作与任何我扔在它从Minecraft服务器日志到Exim MTA。make | ccze -A
make
ccze
make | ccze -A
wd2eg0qa3#
如果你是emacs用户,你可以使用命令M-x compile,这会把make输出放在一个突出显示的缓冲区中,错误作为指向源代码中相关行的链接。
M-x compile
zvokhttg4#
只是另一个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]} }
2w3kk1z55#
下面的呢?
它由this Makefile的简化版本产生。
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)
它假定所有C++源文件都位于src目录(扩展名为.cc)中,头文件位于include目录中。
src
include
8yparm6h6#
我曾经对日志文件使用multitail,它可以根据各种标准突出显示(和过滤)行。
nnt7mjpx7#
在Mac上,它通过在错误字符串周围打印tput颜色代码来工作。第一个export tput颜色代码如下:
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形式运行屏幕截图-x1c 0d1x
make check-env
oalqel3c8#
GCC有一个环境变量:
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
zpqajqem9#
我最近为我们的团队研究了这个问题,我修改了make的源代码,以生成输出,其中CL.EXE(Windows)输出使用ANSI转义码以颜色显示文本“警告”和“错误”。我把它放在github这里:https://github.com/XtheOne/make-colorized它还可以进一步发展,把需要替换的单词作为参数或文件来配置,但现在它对我们来说还不错。
9条答案
按热度按时间zpqajqem1#
看一下
colormake
,找到了here利用谷歌的力量,我还发现了这个bash功能。
lndjwyie2#
我已经来到这个问题寻找一个解决方案来着色
make
输出,然后记得前一段时间我已经研究了一个很好的通用日志着色器,并发现ccze
。它的工作与任何我扔在它从Minecraft服务器日志到Exim MTA。make | ccze -A
wd2eg0qa3#
如果你是emacs用户,你可以使用命令
M-x compile
,这会把make输出放在一个突出显示的缓冲区中,错误作为指向源代码中相关行的链接。zvokhttg4#
只是另一个bash函数,非常简洁
2w3kk1z55#
下面的呢?
它由this Makefile的简化版本产生。
它假定所有C++源文件都位于
src
目录(扩展名为.cc)中,头文件位于include
目录中。8yparm6h6#
我曾经对日志文件使用multitail,它可以根据各种标准突出显示(和过滤)行。
nnt7mjpx7#
在Mac上,它通过在错误字符串周围打印
tput
颜色代码来工作。第一个
export tput
颜色代码如下:然后,向Makefile添加一个目标,如下所示:
然后以
make check-env
形式运行屏幕截图-x1c 0d1x
oalqel3c8#
GCC有一个环境变量:
zpqajqem9#
我最近为我们的团队研究了这个问题,我修改了make的源代码,以生成输出,其中CL.EXE(Windows)输出使用ANSI转义码以颜色显示文本“警告”和“错误”。
我把它放在github这里:https://github.com/XtheOne/make-colorized
它还可以进一步发展,把需要替换的单词作为参数或文件来配置,但现在它对我们来说还不错。