7

在 GNU Make 3.81 中,如果工具链的任何部分出现错误,我需要删除一个锁定文件。是否有一个特殊的目标可以让我这样做?我需要编写包装脚本吗?

在下面的示例中,如果 file.out 的规则失败,我需要 unlock_id 发生。

谢谢!-杰夫

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
4

3 回答 3

7

我会在与以下相同的目标中进行锁定/解锁file-maker

file.out: file.in
        lockfile $@.lock
        file-maker < $< > $@; \
        status=$$?; \
        rm -f $@.lock; \
        exit $$status

这会在同一个 shell 中执行file-maker和解锁步骤,如果失败,保存file-makerso的状态makefile-maker失败。

于 2011-07-04T02:00:43.200 回答
4

这有点杂乱无章,但它确实有效:

all:
        @$(MAKE) file.out || $(MAKE) unlock_id
于 2011-07-02T02:47:56.393 回答
0

您需要.DELETE_ON_ERROR目标,它允许您指定在出错时要删除的文件。

http://www.gnu.org/s/hello/manual/make/Special-Targets.html

编辑

我的错,这是一个半真半假的事实。它允许您指定要删除文件,但至于哪些文件以及在什么情况下,这取决于make.

于 2011-07-01T21:11:41.143 回答