2011-11-24 17 views
0

GCCコンパイラが出力するエラーと警告を個別に処理する方法はありますか?プログラムがコンパイルされている場合、
はどのように私はすべてのエラーは、「warnings.txt」に行き、「error.txt」
と警告のすべてに行くことになるだろう


私がそこにあると仮定これは簡単な解決策ですが、詳細を教えてください:GCCコンパイラの出力を判断する[警告する場合] [エラーの場合はこれを行う]

私はGCCでコンパイルするためにGNU makefileを書いており、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 

すべてがだから私はdefinit

をERRORS.TXTに行きますそれをファイルに送信して、より簡単な方法があればそれを解析したくありません。


重要ではないかもしれないいくつかの他の注意事項:

if ($(COMPILE)); then\ 

/\警告がある場合でも、 が、私はフラグを提供しない限り、それは「...真と評価されます-Werror "これは単に警告を出力し、gccはプログラムのコンパイルを拒否します

+0

'./script.sh> log_file 2> err_file'これはあなたのためには機能しませんか? –

+0

'cout'と' cerr'は、標準出力(stdout)と標準エラー(stderr)に書き込むiostreamオブジェクトにC++によって与えられた名前です。 –

+0

エラーと警告の両方がstderrに送られます。あなたは、sedと言ってそれらをフィルタリングしたいですか? – Beta

答えて

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 & 
関連する問題