如何单独处理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\
/\ 即使有警告,它也会评估为 true...除非 我提供了标志“-Werror”,它只会发出警告错误,并且 gcc 拒绝编译程序
这适用于命名管道和类似于此的 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 &