ksaitoの日記

日々試したことの覚え書き

makeのオプション

移転しました。

自動的にリダイレクトします。

操作を自動化するには、makeが便利です。
クリーンナップをする場合、あってもなくてもプロセスをkillするような操作をすることがあります。

例えば、aaaaとbbbbという2つのプロセスをkillする必要があるが、aaaaプロセスが既に終了しているというケースです。
この場合、下記のように書くとbbbbプロセスが動いていてもkillせず、bbbbプロセスが残ってしまいます。

$ cat Makefile 
claen:
	pkill -KILL aaaa
	pkill -KILL bbbb
$ make
pkill -KILL aaaa
make: *** [claen] エラー 1
$ 

そこで、pkillのステータスを無視するように設定します。

$ cat Makefile
claen:
	-pkill -KILL aaaa
	-pkill -KILL bbbb
$ make
pkill -KILL aaaa
make: [claen] エラー 1 (無視されました)
pkill -KILL bbbb
make: [claen] エラー 1 (無視されました)
$ 

これで、想定の処理をするようになりましたが、この出力だと正常なのか異常なのかよくわかりません。
エラーの出力は、makeに-sオプションを付けるか、Makefileに.SILENTというターゲットを追加することで抑制できます。

$ cat Makefile
.SILENT:

claen:
	-pkill -KILL aaaa
	-pkill -KILL bbbb
$ make
$

これは、これで良いのですがやっぱり、何をしているか教えてほしいです。

$ cat Makefile
.SILENT:

claen:
	echo cleanup process
	echo kill aaaa
	-pkill -KILL aaaa
	echo kill bbbb
	-pkill -KILL bbbb
$ make
cleanup process
kill aaaa
kill bbbb
$