如何单独处理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拒绝编译程序
答案 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 &