bash - howto - ¿Cómo puedo resaltar las líneas de advertencia y error en la salida de make?
makefile structure (6)
¿Qué tal lo siguiente?
Es producido por una versión simplificada de este 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)
Se supone que todos los archivos de origen de C ++ están en el directorio src
(extensión .cc) y que los archivos de encabezado están en el directorio de include
.
A veces, la salida de make llena la pantalla. Es un poco difícil identificar todas las líneas de mensajes de advertencia y error. Sé que la salida de color de la cáscara puede ayudar ¿Puede alguien ayudarme?
Echa un vistazo a colormake
, que se encuentra here
$ apt-cache search colormake
colormake - simple wrapper around make to colorize output
Usando el poder de Google, también encontré esta función 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]}
}
He llegado a estas preguntas en busca de una solución para colorear la producción y luego recordé hace un tiempo que he investigado un buen colorizador de registro genérico y ccze
encontrado ccze
. Funciona con todo lo que le ofrezco desde los registros del servidor de Minecraft a Exim MTA.
make | ccze -A
NOTA : al especificar la opción -A se habilita ''raw-ansi'', de lo contrario, en mi experiencia, algunos resultados se ''borran'' al final de la ejecución.
Si eres un usuario de emacs, puedes usar el comando Mx compile
. Esto coloca a make output en un búfer resaltado, con errores que actúan como enlaces a la línea correspondiente en el código fuente.
Solía usar el multitail para los archivos de registro; puede resaltar (y filtrar) líneas según diversos criterios.
Solo otra función bash, muy concisa
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]}
}