web-dev-qa-db-ja.com

GNUデフォルトでサイレントにする

Makefile内からデフォルトでコマンドのエコーを抑制することは可能ですか?

make--silentモードで実行すると、すべてのコマンドの前に@を付けるのと同じように動作します。

私は含めることができるコマンドまたはスタンザを探していますinside Makefileを使用して、@ですべてを散らかしたり、ユーザーがすべてを手動で沈黙させたりする手間を省きます。

21
slezica

ターゲット.SILENT:を定義すると、makeは何もエコーしません。通常は定義を保護するのが最善なので、簡単にオフにできます。

ifndef VERBOSE
.SILENT:
endif

現在、デフォルトではmakeは何も出力しませんが、make VERBOSE=1を実行すると出力されます。

.SILENTは廃止されたとマニュアルに記載されていますが、適切に保護されている場合、@よりも一般的にはるかに優れています(より便利で柔軟性があります)。

.SILENTターゲットすべきではないMakefileの最初になるか、そうでなければmakeがデフォルトで使用します。

34
Chris Dodd

あなたは付け加えられます --silentMAKEFLAGS 変数の先頭にあるMakefile

MAKEFLAGS += --silent

all:
    echo foobar

.PHONY: all

そしてあなたは:

$ make
foobar
24
jml

GNU Make's manual によると、特別なターゲット.SILENTを使用できます。

マニュアルには次のように書かれていることに注意してください:

.SILENTは、「@」の方が柔軟であるため、基本的に廃止されました。

しかし、期待どおりに動作するようです。次のコードは、allターゲットをサイレントにします。

.SILENT:

hoge:
    echo hoge

次の例では、hogeターゲットのみを無音にします。

.SILENT: hoge

hoge:
    echo hoge

fuga:
    echo fuga
7
ymonad