Make - 他の出力を抑制せずにmakeエラーメッセージを抑制する方法

Make - 他の出力を抑制せずにmakeエラーメッセージを抑制する方法

私はMakeを取り巻くラッパーに過ぎないシンプルなビルドシステムを実装しています。このビルドシステムはすでに独自のエラーメッセージを表示しているため、Makeがこのようなエラーメッセージを生成したくありません。

make: *** [/cool/makefile:116: /fun/target.o] Error 1

失敗したとき。

私は-sMakeのほとんどの出力を抑制するためにこのフラグを使用しました。私はMakeがエラーを無視したくありません。私はまだそれを停止し、状態で終了したいと思います。実行中のMakeジョブによって印刷されたメッセージをmake 2> /dev/null見続けたいので、すべてのエラー出力を終了することはできません。stderr

Make出力を手動で解析して整理せずにこれを行う方法はありますか?私はGNU Make 4.2.1を使用しており、GNU Make専用のソリューションは気に入らない。

答え1

あなたのシステムはmake用のラッパーなので、makefileを生成するとします。2>&3makefileにすべてのシェルコマンドを追加するようにジェネレータを調整し、プログラムがファイルディスクリプタ3を標準エラー(ファイルディスクリプタ2)にリダイレクトし、ファイルディスクリプタ2を/dev/null。 itに追加する/dev/nullと、ビルドコマンドはラッパーの標準エラーに移動する標準エラーとして印刷されます。

手書きのmakefileを使用している場合、makefileの構文があまりにも混乱しない場合(たとえば、コマンドを生成する素晴らしいGNU makeマクロがない場合)、これらのリダイレクトを追加するように変換できます。タブとオプション、またはで@始まり-、前の行がバックスラッシュで終わらない各行の場合は、exec 2>&3;タブと選択の後に追加します@-

makefileを変更する代わりに、引数を使用して呼び出すことができます。その後、SHELL=/path/to/shell_wrapper引数shell_wrapperを実行し、標準エラーを次のように別の記述子にリダイレクトします。

#!/bin/sh
eval "$2" 2>&3

関連情報