5

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

.c${MT}.doj:

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

@ が発行されるコンパイル行を抑制するので、これは素晴らしいことです。しかし、エラーが発生すると、エラー メッセージだけが表示され、コマンド ラインは表示されません。コマンドラインを発行する「きちんとした」方法を考えられる人はいますか? 私が考えることができるのは、それをファイルにエコーし、より高いレベルでエラーをキャッチしてファイルを猫にすることだけです。ハッキー知ってる。

4

4 に答える 4

7

テストして動作しました(LinuxでのGNU製):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false
于 2008-10-20T12:42:26.147 に答える
7

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

@echoまた、この状況では、典型的なことを行い、 を別の行に配置し、実際のルール コマンドを ' なしで別の行に配置する必要があることに注意してください@

于 2012-04-22T04:46:49.160 に答える
0

私は最近、batファイルの実行中に発生した出力を追跡するなどの目的でlogtextと呼ばれるユーティリティを使用しました。それをチェックしてください。どのエラーがどこで発生したかを知りたい場合は、これが非常に役立つことがあります。

于 2008-10-20T12:44:10.340 に答える
0

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

#!/bin/bash

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

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

必要に応じて、同様のコードを直接に入れることもできますMakefile

于 2008-10-20T12:43:02.790 に答える