0

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

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

real_target:
    echo "Do something magical"
4

1 回答 1

0

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

target:
    trap "$(umount)" EXIT ; \
    $(mount) && \
    echo "Do something magical"
    touch $@
于 2013-08-30T15:05:40.660 回答