the make howto create bash shell makefile gnu-make

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]} }