wake-up-neo.net

Wie kann ich die Warn- und Fehlerzeilen in der make-Ausgabe hervorheben?

Manchmal füllt die Ausgabe von make den Bildschirm. Es ist ein bisschen schwierig, alle Warn- und Fehlermeldungen zu identifizieren. Ich weiß, dass die Shell-Farbausgabe helfen kann. Kann mir jemand helfen?

25
Eric guan

Schau dir colormake an, gefunden hier

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

Mit der Kraft von Google habe ich auch diese Bash-Funktion gefunden.

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]}
}
36
Fredrik Pihl

Ich bin zu diesen Fragen gekommen, auf der Suche nach einer Lösung, um die Ausgabe von make zu kolorieren, und dann erinnerte ich mich an eine Weile, als ich einen guten generischen Protokoll-Colorizer erforscht und ccze gefunden habe. Es funktioniert mit allem, was ich von Minecraft Server-Protokollen an Exim MTA anstrebe.

make | ccze -A

NOTE: Durch Angabe einer Option wird 'raw-ansi' aktiviert, andernfalls wird nach meiner Erfahrung eine Ausgabe am Ende des Laufs 'gelöscht'. enter image description here

16

Wenn Sie ein Emacs-Benutzer sind, können Sie den Befehl M-x compile verwenden. Dadurch wird die Ausgabe von make in einen hervorgehobenen Puffer gestellt, wobei Fehler als Links zu der entsprechenden Zeile im Quellcode dienen.

6
Dan

Wie wäre es mit dem Folgenden?

 colored output of make

Es wird von einer vereinfachten Version von diesem Makefile erstellt.

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)

Es wird davon ausgegangen, dass sich alle C++ - Quelldateien im Verzeichnis src (Erweiterung .cc) und die Header-Dateien im Verzeichnis include befinden. 

3
gospes

Nur eine weitere Bash-Funktion, viel prägnant

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]}
}
3
Jain Rach

Früher habe ich multitail für Protokolldateien verwendet, um Zeilen nach verschiedenen Kriterien hervorzuheben (und zu filtern).

1
Zsolt Botykai

Auf dem Mac funktionierte es durch Drucken von tput-Farbcodes um die Fehlerzeichenfolge.

Erste export tput-Farbcodes wie folgt:

export red=`tput setaf 1`
export reset=`tput sgr0`

dann füge ein Ziel zu Makefile hinzu:

...
check-env:
ifndef ENV
    $(error ${red}ENV is undefined. Please export it using command [ export ENV=dev ]${reset})
endif
...

führen Sie es dann als make check-env aus.

Bildschirmfoto -  enter image description here

0
Robert Ranjan