Make:是否可以在发生错误时执行目标(如.DELETE_ON_ERROR在发生错误时删除目标)

时间:2013-08-30 14:31:22

标签: makefile

我有一些创建为目标的挂载点,并且为了创建另一个目标而挂载。当制作其他目标时,必须卸载它们,这是相对简单的,使用其他.PHONY目标来执行此操作。但是,如果发生错误,仍需要卸载它们。是否可以根据某些目标进行此操作,该目标在发生错误时必须重新制作?我知道在遇到错误时通常会停止处理配方。我提出的唯一可行的选择是执行子制作:

virtual_target:
    sudo mount somelocation somepath ; \
    $(MAKE) real_target ; \ ret=$$? \
    sudo umount -fl somepath ; \
    exit $$ret

real_target:
    echo "Do something magical"

1 个答案:

答案 0 :(得分:0)

我通过不将位置作为目标安装来解决它,而是创建一个宏来安装它们。然后我在配方中设置一个陷阱,在退出时卸载它们:

target:
    trap "$(umount)" EXIT ; \
    $(mount) && \
    echo "Do something magical"
    touch $@