メモの日々


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' にアクセスできません: そのようなファイルやディレクトリはありません