web-dev-qa-db-ja.com

makefileでコマンド呼び出しのエコーを抑制しますか?

出力をstdoutに出力することになっている割り当て用のプログラムを作成しました。割り当て仕様では、make run > outputFileとして呼び出されたときにプログラムを実行し、仕様に指定されたものと同じSHA1フィンガープリントを持つファイルに出力を書き込むMakefileを作成する必要があります。

私の問題は、私のメイクファイル:

...
run:
     Java myprogram

また、プログラムを実行するコマンド(Java myprogram)など)を出力ファイルに出力します。これにより、ファイルにこの余分な行が含まれ、フィンガープリントが間違っています。

コマンド呼び出しをコマンドラインにエコーせずにコマンドを実行する方法はありますか?

108
noobler

追加 @コマンドの先頭に、実行中のコマンドを出力しないようにgmakeに指示します。このような:

run:
     @Java myprogram

Oliが提案したように、これはMakeの機能であり、Bashの機能ではありません。

一方、Bashは、明示的にそうするように指示しない限り、実行中のコマンドをエコーし​​ません(つまり、-xオプション)。

185
user405725

さらに簡単に、make -s(サイレントモード)を使用してください!

54
user3619296

.SILENT

.SILENT: run
    hi:
         echo "Hola!"
    run:
         Java myprogram

この場合、 make hiはコマンドを出力しますが、make runは出力されません。

16
Kien Pham

コマンドの前に@を付けると、行の末尾にバックスラッシュを使用してコマンドを拡張することにより、セクションに拡張できます。出力を抑制するために.PHONYコマンドが必要な場合、セクションを次のように開始できます。

@printf "..."
2
Wiley