对 GCC 编译器输出做出决定 [如果警告.. 执行此操作] [如果错误.. 执行此操作]

问题描述 投票:0回答:1

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

bash gcc makefile warnings
1个回答
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 &
© www.soinside.com 2019 - 2024. All rights reserved.