2017-07-20 10 views
0

私はMicrosoft Team Foundation Serverからビルドを開始しています。これは、何かがstderrに書き込まれた場合にビルドに失敗するオプションがあります。 makeはstderrに警告を書き込みますが、実際に成功したとしてもビルドに失敗します。gnu makeでstderrではなくstdoutに警告を書き込ませることはできますか?

私はmake --helpの出力をブラウズしましたが、この効果は何も見つかりませんでした:コンパイラの警告がstderrに書き込まれるのを防ぐことができますが、それでも他の種類のものstderr?それは、GNUの一部が原因GNU上で行うことはありません

答えて

1

、あなたは

make 2>&1 

ようにし、所望の効果を得る実行することができます:2>&1ディレクティブは、単に標準出力(1)に(2)標準エラーをリダイレクトします。それがTFSで動作するかどうかは、それがGNU makeを呼び出す方法に依存します。デフォルトのシェルは、このようなリダイレクトをサポートしていない場合、このように、bashのの明示​​的な呼び出しを追加する必要がある場合があります

bash -c "make 2>&1" 
+0

警告に加えて、stderrに書き込まれる可能性のある他のものがあると想像しています。私はまだstderrに行きすぎてビルドに失敗し、それが私の注意を引くようにします。そのようなことが表示されない場合は、私はあなたの答えを受け入れるでしょう。 – MatrixManAtYrService

+0

エラーの原因となるものは、makeが0以外の終了ステータスで終了するようにする必要があります。 –

+0

これも私が思ったことですが、makeがstderrにコンパイラの警告を書いたので "失敗"しているビルドがあります。私がTFSから得たメッセージは ''コード0で終了しました ''ですが、stderrに触れてしまったため、これは失敗のように扱われます。 – MatrixManAtYrService

0

ですから、トラップしたいと任意のプログラムの標準エラー出力をの標準エラー出力を行うことはなく、 をレシピで実行しますか?

これはまともなGNU環境(cygwinなど)で動作します。その標準出力

    1. ポイントメイクの記述子3現在の標準エラー出力に
    2. リダイレクトメイクのstderrにレシピの標準エラー出力をリダイレクトするスクリプトを使ってレシピで使用されるシェルを交換してくださいレシピの記述子3(すなわち、メイクのオリジナル標準エラー出力)のコンセプトの

    証明:

    .PHONY: t 
    t: 
        $(warning We want this to go to make's stdout) 
        echo "We want this to go to make's stderr" >&2 
    

    交換用シェル(ファイルにSHは言う):

    #!/bin/bash 
    exec 2>&3 
    exec bash -"[email protected]" 
    

    呼び出し:

    $ make SHELL=./SH 3>&2 2>&1 
    

    が、何が起こっているかを見るFDS 1、2およびファイル3を収集した後、外観にファイルで。

    $ (make SHELL=./SH 3>&2 2>&1) 1>1 2>2 3>3 
    $ head 1 2 3 
    ==> 1 <== 
    Makefile:3: We want this to go to make's stdout 
    echo "We want this to go to make's stderr" >&2 
    
    ==> 2 <== 
    We want this to go to make's stderr 
    
    ==> 3 <== 
    

    ので、$(warning …)はstdoutに行き、どんなレシピの標準エラー出力はまだstderrに行ってきました。 Sheesh。

  • 関連する問題