2018年03月14日(水) [長年日記]
■ [howto][dev] GNU Makeでエラー時に成果物を削除する
makeはコマンドが失敗してもターゲットファイルを削除しない。
$ cat Makefile
out:
$(COMMAND) > $@
$ COMMAND=gagaga make
gagaga > out
/bin/sh: 1: gagaga: not found
Makefile:2: ターゲット 'out' のレシピで失敗しました
make: *** [out] エラー 127
$ ls -l out
-rw-rw-rw- 1 kenichi kenichi 0 3月 14 15:52 out
GNU Makeなら、.DELETE_ON_ERROR というターゲットを作っておくとエラー時にターゲットファイルを削除してくれるみたい。
$ cat Makefile
.DELETE_ON_ERROR:
out:
$(COMMAND) > $@
$ \rm out
$ COMMAND=gagaga make
gagaga > out
/bin/sh: 1: gagaga: not found
Makefile:4: ターゲット 'out' のレシピで失敗しました
make: *** [out] エラー 127
make: *** ファイル 'out' を削除します
$ ls -l out
ls: 'out' にアクセスできません: そのようなファイルやディレクトリはありません
[ツッコミを入れる]