web-dev-qa-db-ja.com

コンパイラのすべての出力をファイルにキャプチャするにはどうすればよいですか?

私はLinuxのソース(CPP)からオープンソースプロジェクトを構築しています。これが順序です:

$CFLAGS="-g Wall" CXXFLAGS="-g Wall" ../trunk/configure --prefix=/somepath/ --Host=i386-pc --target=i386-pc
$make

コンパイル中に多くのコンパイラ警告が表示されます。それらの修正を開始したいです。私の質問は、すべてのコンパイラ出力をファイルに取り込む方法ですか?

$make > fileは仕事をしていません。 g++ -someoptions /asdf/xyz.cppのようなコンパイラコマンドを保存しているだけです。これらのコマンド実行の出力が必要です。

55
pecker

コンパイラの警告はstderrではなくstdoutで発生するため、makeを別の場所にリダイレクトしただけでは警告は表示されません。代わりに、Bashを使用している場合はこれを試してください。

$ make &> results.txt

&は、「stdoutおよびstderrをこの場所にリダイレクトする」ことを意味します。多くの場合、他のシェルには同様の構造があります。

104
John Feminella

ボーンシェルの場合:

make> my.log 2>&1

つまり> stdoutをリダイレクト、2>&1はstderrをstdoutと同じ場所にリダイレクト

25
Nathan Kidd

これまでのところ、たくさんの良い答えがあります。ここにフリルがあります:

$ make 2>&1 | tee filetokeepitin.txt 

過去の出力スクロールを見ることができます。

22
dmckee

出力はstderrに送られました。つかいます 2>をキャプチャします。

$make 2> file
5
kennytm

から http://www.oreillynet.com/linux/cmd/cmd.csp?path=g/gcc

>文字は標準エラーをリダイレクトしません。エラーメッセージを含むファイルを作成せずに正当な出力を保存する場合に便利です。しかし、エラーメッセージが保存したい場合はどうでしょうか。これはトラブルシューティング中に非常に一般的です。解決策は、大なり記号の後にアンパサンドを使用することです。 (この構成は、ほとんどすべての最新のUNIXシェルで機能します。)標準出力と標準エラーの両方をリダイレクトします。例えば:

$ gcc invinitjig.c >& error-msg

これが役立つ場合は、こちらをご覧ください: 別のフォーラム

3
Gauthier

ビルド出力から警告とエラーを強調表示するとします。

make |& grep -E "warning|error"
3
Peter Nguyen

通常、それはあなたがしたいことではありません。コンパイラーの出力の読み取りをサポートし、問題のあるファイル/行の文字にアクセスできるエディターでコンパイルを実行する必要があります。すべてのエディターで検討する価値があります。 emacsのセットアップは次のとおりです。

https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation.html

0

make 2> file。コンパイラの警告は、標準出力ストリームではなく、標準エラーストリームに出力されます。私の提案が機能しない場合は、標準エラーを迂回する方法について、シェルのマニュアルを確認してください。

0
David Thornley