Jak wyróżnić linie ostrzeżenia i błędów w wyjściu make?

Czasami wyjście make wypełnia ekran. Trochę trudno jest zidentyfikować wszystkie linie ostrzeżeń i komunikatów o błędach. Wiem, że może Kolor powłoki może pomóc czy ktoś może mi pomóc?

Author: poolie, 2011-06-22

6 answers

Zobacz colormake, znalezione tutaj

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

Korzystając z mocy google, znalazłem również tę funkcję 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]}
}
 35
Author: Fredrik Pihl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-25 14:17:03

Doszedłem do tego pytania szukając rozwiązania do kolorowania make wyjście i przypomniałem sobie jakiś czas temu, że zbadałem dobry generic log colorizer i znalazłem ccze. Działa z wszystkim, co na niego rzucę, od dzienników serwera Minecraft po Exim MTA.

make | ccze -A

notatka: podanie opcji-a włącza 'raw-ansi' w przeciwnym razie niektóre dane wyjściowe są 'wyczyszczone' na końcu uruchomienia z mojego doświadczenia. Tutaj wpisz opis obrazka

 16
Author: Daniel Sokolowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 03:43:13

Jeśli jesteś użytkownikiem Emacsa, możesz użyć polecenia M-x compile. Powoduje to umieszczenie wyjścia make w podświetlonym buforze, z błędami działającymi jako łącza do odpowiedniej linii w kodzie źródłowym.

 6
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 06:32:57

Co powiesz na to?

kolorowe wyjście marki

Jest produkowany przez uproszczoną wersję tego 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)

Zakłada, że wszystkie pliki źródłowe C++ znajdują się w katalogu src (extention .cc), a pliki nagłówkowe w katalogu include.

 3
Author: gospes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 13:52:39

Kolejna funkcja bash, dużo zwięzła

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]}
}
 3
Author: Jain Rach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-06 08:39:08

Używałem multitail dla plików logów może podświetlić (i filtrować) linie według różnych kryteriów.

 1
Author: Zsolt Botykai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-06 12:10:19