Примите решение о выводе компилятора GCC [если предупреждение .. сделайте это] [если ошибка .. сделайте это] - PullRequest
0 голосов
/ 25 ноября 2011

Как я могу индивидуально обрабатывать ошибки и предупреждения, выдаваемые компилятором GCC?
Например, если программа скомпилирована,
Как бы я получить все ошибки, чтобы перейти к «error.txt»
и все предупреждения перейти на "warnings.txt"
Я предполагаю, что есть простое решение для этого, но позвольте мне предоставить более подробную информацию:

Я написал make-файл GNU для компиляции с GCC, и правила make-файла выполняются bash.
Я хотел бы, чтобы это решение о ветвлении имело место в правиле моего make-файла.
Так может быть что-то вроде этого, например:

if (PROGRAM_HAS_NO_ERRORS_OR_WARNINGS); then\  
    echo "Everything went well";\  
else\  
    if (PROGRAM_HAS_WARNINGS); then\  
        echo "HERE ARE THE WARNINGS: " $(PROGRAM_WARNINGS);\  
    fi;\
    if (PROGRAM_HAS_ERRORS); then\  
        echo "HERE ARE THE ERRORS: " $(PROGRAM_ERRORS);\  
    fi;\
fi;

У меня сложилось впечатление, что предупреждения были предупреждены ... и ошибки были ошибочными ..
и этот cout соответствовал 1, а cerr соответствовал 2.
Однако, когда я запускаю что-то вроде этого:

$(COMPILE) 1>warnings.txt 2>errors.txt  

все идет к ошибкам.txt

Так что я определенно не хочу отправлять его в файл, а затем анализировать его, если есть более простой способ.


некоторые другие заметки, которые могут быть не важны:

if ($(COMPILE)); then\

/ \, даже если есть предупреждения, оно оценивается как истинное ... UNLESS Я предоставляю флаг "-Werror", который просто выводит предупреждения об ошибках, а gcc отказывается компилировать программу

1 Ответ

1 голос
/ 06 марта 2012

Это предоставляет именованный канал и оператор case, подобный этому:

mkfifo errors.txt

while read LINE; do
  case "$LINE" in
    *[Ee]rror*)error_function $LINE;;
    *[Ww]arning*)warning_function $LINE;;
    *)echo GENERAL ERROR MSG : $LINE;;
  esac
done <errors.txt &

make 2> errors.txt &
...