Makefile に出てくる アットマーク(@)とハイフン(-)の意味について調べた。

通常実行

まずは下記のように、 Makefile に通常通りcmd1というコマンドを定義する。

cmd1:
	echo 'hello world'

⚠インデントはスペースではなく Tab を使うことに注意

実行結果

実行するとコマンドの実行結果に加えて、実行したコマンド自身が出力される。

$ make cmd1
echo 'hello world'
hello world

つまりここでは、下記二つが出力されている。

  1. echo 'hello world' というコマンド
  2. 1 の出力結果である hello world

@ アットマーク

@ を付けると、コマンド自身を標準出力しないという意味になる。

cmd2:
	@echo 'hello world'

実行結果

実行すると実行したコマンドは出力されない。

つまりここでは echo 'hello world'は出力されず、その結果であるhello worldだけが出力される。

$ make cmd2
hello world

- ハイフン

- はエラーを無視するという意味だ。

cmd3:
	invalid_command
	echo 'invalid?'
cmd4:
	-invalid_command
	echo 'invalid?'

実行結果

-がないcmd3は、不正なコマンドが入っているときにエラーで終了する。

$ make cmd3
invalid_command
make: invalid_command: No such file or directory
make: *** [cmd3] Error 1

-を付けると、不正なコマンドであっても無視することができる。

$ make cmd4
invalid_command
make: invalid_command: No such file or directory
make: [cmd4] Error 1 (ignored)
echo 'invalid?'
invalid?

参考資料

Makefile の “-@” (ハイフン、アット) ってなんですか? - quwaharaの日記