Quiet Makeを取得してエラー時にコマンドラインをエコーする
質問
長い長いコマンドラインを使用して多くの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ファイルの経過。確認してください。どこでどのエラーが発生したかを知りたい場合、これは非常に便利です。