在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
答案 0 :(得分:7)
我会在与file-maker
相同的目标中执行锁定/解锁:
file.out: file.in
lockfile $@.lock
file-maker < $< > $@; \
status=$$?; \
rm -f $@.lock; \
exit $$status
这会在同一个shell中执行file-maker
并解锁步骤,保存file-maker
状态,以便make
失败时file-maker
将失败。
答案 1 :(得分:4)
这是一种kludge,但它有效:
all:
@$(MAKE) file.out || $(MAKE) unlock_id
答案 2 :(得分:0)
您需要.DELETE_ON_ERROR
目标,该目标允许您指定在出错时删除的文件。
http://www.gnu.org/s/hello/manual/make/Special-Targets.html
修改强>
我的坏,那是半真半假的。它允许您指定要删除文件,但是哪些文件被删除,以及在什么情况下,最多make
。