在GNU Make 3.81中,如果工具链的任何部分出现错误,我需要删除一个锁定文件。有没有一个特殊的目标可以让我这么做?我需要写一个包装脚本吗?
在下面的示例中,如果file.out的规则失败,我需要unlock_id。
谢谢!-Jeff
all: lock_id file.out unlock_id
file.out: file.in
file-maker < file.in > $@
lock_id:
lockfile file.lock
unlock_id:
rm -rf file.lock
我会在与file-maker
:相同的目标中进行锁定/解锁
file.out: file.in
lockfile $@.lock
file-maker < $< > $@;
status=$$?;
rm -f $@.lock;
exit $$status
这在同一个shell中执行file-maker
和解锁步骤,保存file-maker
的状态,因此如果file-maker
失败,make
将失败。
这是一种拼凑,但它有效:
all:
@$(MAKE) file.out || $(MAKE) unlock_id
您需要.DELETE_ON_ERROR
目标,它允许您指定在出现错误时要删除的文件。
http://www.gnu.org/s/hello/manual/make/Special-Targets.html
编辑
我的坏,这是半个事实。它允许您指定要删除的文件,但至于删除哪些文件以及在什么情况下删除,则取决于make
。