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


147

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

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

...
run:
     java myprogram

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

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

回答:


247

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

run:
     @java myprogram

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

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


6
+1。しかし、OPの混乱を解消するために、これがBashではなくMakeの機能であることを明確にする価値があるかもしれません。
オリバーチャールズワース2012

1
@OliCharlesworth:理にかなっている、と付け加えた。ありがとう。

すべてのエコーを無効にする方法はありますか?または、セクションでオフにして後でオンにするのですか?
Benubird 2015

2
@Benubird make -sがそれを行いますが、IMHO はとにかくはるかに優れたソリューションです。最近、この質問に対する個別の回答として投稿されました。
tripleee 2016

1
これは、if ... thenステートメントでは機能しません:( any idea?
user1623521

74

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


3
賛成票:これは本当にここで受け入れられる答えになるはずです。Makefileに@コマンドを振りかけると、デバッグが困難になり、多くの混乱が生じます。
tripleee 2016

11
これが進むべき方法であることに同意します-ただし、元の問題の説明では、makeを呼び出すのは私ではないことに注意してください-私のインストラクターもそうです。したがって、渡されるフラグを制御することはできません。makefile内から出力を制御する必要がありました。ただし、現実の世界で最も実用的なソリューションに賛成票を投じてください。
noobler 2016

6
.SILENT:ターゲットを使用して、これを自分で制御できます。make.mad-scientist.net/managing-recipe-echoingを
MadScientist 2018

実際に、警告が表示されている-Wall場合でも、それらは出力されます。もちろん、-s警告も表示したい場合は、なぜ使用するのですか?
User81862311

33

あなたも使うことができます .SILENT

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

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


1

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

@printf "..."
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.