きしもとと申します

make で生成物を管理していて、

(Makefileの例)
bar : foo
        gen_bar foo

foo : foo_src.txt
        gen_foo foo_src.txt > foo

のようにリダイレクトでターゲットファイルを生成している場合など、
コマンドの実行がエラーになっても、ターゲットファイルが作られて
しまい、make を再実行すると、この例の場合だと 正しく作られて
いない foo から bar を生成しようとしてしまいます。

GNU make には、コマンドが異常終了した場合や、さらに .DELETE_ON_ERROR
というターゲットがあれば、終了ステータスが 0 でなければ、中途半端に
作られた(であろう)ターゲットファイルを削除してくれる、という
機能があります。

FreeBSD の make( /usr/bin/make の make )では、^C で中断された場合
には、ターゲットファイルを削除してくれるのですが、他の正常終了で
ない場合に、削除させる方法は無いのでしょうか?

# 調べていたところ "What is BSD make?" というスレッドを見つけました
# http://mail-index.netbsd.org/netbsd-users/2008/10/thread2.html#002183
# これによると NetBSD の make は FreeBSD の make とだいぶ違うとの
# ことですがこの質問は一応 FreeBSD の make についてということで
# お願いします。

メールによる返信