决定GCC编译器输出[如果警告..这样做] [如果错误..这样做]

时间:2011-11-24 22:04:01

标签: bash gcc compiler-construction makefile warnings

如何单独处理GCC编译器输出的错误和警告?
例如,如果编译了程序,则 如何将所有错误转到" error.txt"
和所有警告去" warnings.txt"
我假设有一个简单的解决方案,但让我提供更多细节:

我编写了一个GNU makefile,用GCC编译,makefile规则由bash执行。
我希望这个分支决定发生在我的makefile规则中 所以也许像这样的事情:

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 ..并且错误是cerr ..
那个cout对应1和cerr对应2 但是,当我运行这样的事情时:

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

一切都转到errors.txt

因此,如果有更简单的方法,我绝对不想将其发送到文件然后解析它。


其他一些可能不重要的说明:

if ($(COMPILE)); then\

/ \即使有警告,它也会评估为真......除非 我提供了标志" -Werror"这只会使警告错误,而gcc拒绝编译程序

1 个答案:

答案 0 :(得分:1)

这适用于命名管道和类似于此的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 &