0

makeを使用してビルドするプロジェクトがあり、警告メッセージの全体的な状態を分析する可能性を追加したいと思います。

私の考えは、完全な再構築中にstderrコンパイル出力を別のファイルに複製するためにmakeルールを変更することです。make allが実行されるたびに、すべての出力がコンソールに出力され、さらにstderr出力が別のファイルに複製されることを意味します。

この警告レポートファイルはリポジトリに追加されるので、リポジトリに存在する警告とローカルの警告を比較することができます。

問題は、stderr出力を別のファイルに複製する(リダイレクトしない)方法です。Makefileのすべてのターゲットを変更する方法を意味しますか?

stderr出力をリダイレクトする方法(すべて2> warning_report.txtを作成する)を知っていますが、それは私が必要とするものではありません。警告メッセージは、メインコンソールの出力と警告ファイルの両方にある必要があります。

私は作業環境としてWindows7を使用していますが、以前はWindowsコマンドラインやバッチファイルを扱っていませんでした。

前もって感謝します。

編集:

私の場合、最終的な解決策は次のようになります。

make all 3>&1 1>&2- 2>&3- | tee.bat warning_report.txt

この場合、 JScript for Windowsで記述されたスクリプトtee.batは、PAで指定されたリンクから取得しました(ありがとう)。

スワッピングはどうですか、私はここここからそれを取りました。

4

2 に答える 2

0

私はあなたの質問を読み直して、それに答えようと決心しました。

stderrこれをエクスポートして表示するために作成したスニペットを次に示します。

@echo off
if exist stderr.error del stderr.error
this_is_not_a_command 2>stderr.error
if exist stderr.error type stderr.error & del stderr.error

これにより、ファイルにエクスポートstderrされ、そのファイルの内容が表示されます。

それが役立つことを願っています。

于 2013-03-08T06:14:27.217 に答える
0

Windowsについてはわかりませんがtee、Linuxのコマンドを使用して実行できます。tee は、STDOUT をコンソールだけでなくファイルにもリダイレクトするために使用されるため、その利点を活用して、問題を解決できるかどうかを確認できます。

make all 2>&1 1>stdout.log | tee stderr.log

にリダイレクトSTDERRSTDOUT、にリダイレクトSTDOUTstdout.log、すべてがansSTDERRにコピーさstderr.logれ、コンソールにもエコーされます。

しかし、解決策はまだ完全ではありません。はSTDOUTコンソールに出力されず、にコピーされるだけstdout.logです。解決策が得られるコマンドを試してみてください。

于 2013-03-07T10:40:37.777 に答える