Quiet Makeを取得してエラー時にコマンドラインをエコーする

StackOverflow https://stackoverflow.com/questions/218208

  •  03-07-2019
  •  | 
  •  

質問

長い長いコマンドラインを使用して多くのCファイルを作成するMakefileがあり、次のようなルールを使用して出力をクリーンアップしました。

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<

@が出力されるコンパイル行を抑制するため、これは素晴らしいことです。 ただし、エラーが発生した場合、エラーメッセージのみが表示され、コマンドラインは表示されません。 誰でも<!> quot; neat <!> quot;コマンドラインを発行する方法? 私が考えることができるのは、それをファイルにエコーし、より高いレベルにエラーをキャッチさせ、ファイルをcatすることです。ハック、知ってる。

役に立ちましたか?

解決

テストして動作した(LinuxのGNU make):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false

他のヒント

この質問はかなり古いですが、グーグルの皆さんにとっては、この状況で私がすることは、シェルのエイリアスmakeからmake -s(サイレントモード)で、 @または他の診断コマンドが呼び出される行の前にechoプレフィックスを付けます。 \makeからの完全な出力が必要な場合は、エイリアスを@echoとして呼び出してオーバーライドします。

また、この状況では、<!>#8217;典型的なことを実行し、<=>を独自の行に配置する必要があることに注意してください。 >#8217; s。

簡単な解決策は、次のような簡単なスクリプトabcを使用することです。

#!/bin/bash

$@
code=$?
if (( code )); then
  echo error running $@
fi
exit $code

その後、abc $(COMPILER) $(COPTS) -c -o $@ $<Makefileを記述できます。パイプまたはリダイレクトがある場合、これは機能しないことに注意してください(実行するコマンドの代わりに<=>に適用されるため)。

必要に応じて、同様のコードを<=>に直接配置することもできます。

最近、 logtext というユーティリティを使用して、どのような出力が発生したかを追跡しました。実行中のbatファイルの経過。確認してください。どこでどのエラーが発生したかを知りたい場合、これは非常に便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top