Иногда выдает вывод на экран. Немного сложно идентифицировать все строки предупреждений и сообщений об ошибках. Я знаю, может ли выход цвета оболочки может помочь Может ли кто-нибудь мне помочь?
Как я могу выделить строки предупреждений и ошибок в выходной строке?
Ответ 1
Посмотрите colormake
, найдите здесь
$ apt-cache search colormake
colormake - simple wrapper around make to colorize output
Используя силу google, я также нашел эту 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 "[email protected]" 2>&1 | sed -E -e "/[Ee]rror[: ]/ s%$pathpat%$ccred&$ccend%g" -e "/[Ww]arning[: ]/ s%$pathpat%$ccyellow&$ccend%g"
return ${PIPESTATUS[0]}
}
Ответ 2
Я пришел к этим вопросам, ища решение для раскраски make
вывода, а затем вспомнил какое-то время назад. Я исследовал хороший генератор цветных журналов и нашел ccze
. Он работает со всем, что я бросаю в него из журналов сервера Minecraft в Exim MTA.
make | ccze -A
ПРИМЕЧАНИЕ: указание опции "-A" включает "raw-ansi", иначе какой-то вывод "очищается" в конце запуска по моему опыту.
Ответ 3
Если вы являетесь пользователем emacs, вы можете использовать команду M-x compile
. Это помещает вывод make в выделенный буфер, при этом ошибки действуют как ссылки на соответствующую строку в исходном коде.
Ответ 4
Просто еще одна функция bash, очень сжатая
make()
{
/usr/bin/make "[email protected]" 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]}
}
Ответ 5
Как насчет следующего?
Он создается упрощенной версией этого 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 [email protected] $(OBJS) -Iinclude
@g++ -o [email protected] $(OBJS) -Iinclude $(COLOR_OUTPUT)
obj/%.o: src/%.cc
@mkdir -p obj
@echo g++ -o [email protected] -c $< -Wall -Wextra
@g++ -o [email protected] -c $< -Wall -Wextra $(COLOR_OUTPUT)
Предполагается, что все исходные файлы С++ находятся в каталоге src
(extention.cc), а файлы заголовков находятся в каталоге include
.
Ответ 6
Я использовал multitail для файлов журналов, которые могут выделять (и фильтровать) строки на основе различных критериев.