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

在Makefile中,如何清理lockfile文件?,makefile,gnu-make,onerror,lockfile,Makefile,Gnu Make,Onerror,Lockfile,在GNUMake3.81中,如果工具链的任何部分出现错误,我需要删除一个锁文件。有没有一个特别的目标可以让我这么做?我需要写一个包装器脚本吗 在下面的示例中,如果file.out的规则失败,我需要解锁\u id 谢谢! -杰夫 all:lock\u id file.out unlock\u id file.out:file.in 文件生成器$@ 锁号: lockfile.lock 解锁标识: rm-rf file.lock 您需要.DELETE\u ON\u ERROR目标,该目标允许您指定出错

在GNUMake3.81中,如果工具链的任何部分出现错误,我需要删除一个锁文件。有没有一个特别的目标可以让我这么做?我需要写一个包装器脚本吗

在下面的示例中,如果file.out的规则失败,我需要解锁\u id

谢谢! -杰夫

all:lock\u id file.out unlock\u id
file.out:file.in
文件生成器$@
锁号:
lockfile.lock
解锁标识:
rm-rf file.lock

您需要
.DELETE\u ON\u ERROR
目标,该目标允许您指定出错时要删除的文件

编辑


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

这是一种混乱,但它可以工作:

all:
        @$(MAKE) file.out || $(MAKE) unlock_id

我将在与文件生成器相同的目标中执行锁定/解锁操作:

file.out: file.in
        lockfile $@.lock
        file-maker < $< > $@; \
        status=$$?; \
        rm -f $@.lock; \
        exit $$status
file.out:file.in
lockfile$@.lock
文件生成器<$<>$@\
状态=$\
rm-f$@.lock\
退出$$状态

这将在同一个shell中执行
文件生成器
和解锁步骤,保存
文件生成器
的状态,因此如果
文件生成器
失败,则
生成
将失败。

特定命令中的错误,或生成过程中的任何地方出错?Hi Beta,我更新了更详细的问题。谢谢嗨,克里斯,我有一个.DELETE_ON_错误,但是文档表明它的工作方式不同。对于Makefile中的所有目标,如果相应的目标失败,它看起来将删除$@。也就是说,我从来没有真正得到的行为。删除错误的工作,因为我期望…“.DELETE_ON_ERROR如果.DELETE_ON_ERROR在makefile中的任何位置被称为目标,则make将删除规则的目标,前提是它已更改并且其配方以非零退出状态退出,就像它接收到信号时一样。请参阅食谱中的错误。“谢谢-Jeff@Jeff:
.DELETE\u ON\u ERROR
对我有效(GNUMake 3.81),但仅当目标的名称是文件名时有效。在您的情况下,目标的名称似乎是
lock\u id
,但您尝试生成(并要删除)的文件是
foo.lock
。作为Beta全局解决方案的替代方案,您也可以在任何可能失败的命令之后发送垃圾邮件。
/commandthatthaightfail.sh | |$(MAKE)unlock_id
file.out: file.in
        lockfile $@.lock
        file-maker < $< > $@; \
        status=$$?; \
        rm -f $@.lock; \
        exit $$status