在Makefile中,如何清理lockfile文件?

时间:2011-07-01 21:05:57

标签: makefile gnu-make onerror lockfile

在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

3 个答案:

答案 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