我有一些创建为目标的挂载点,并且为了创建另一个目标而挂载。当制作其他目标时,必须卸载它们,这是相对简单的,使用其他.PHONY目标来执行此操作。但是,如果发生错误,仍需要卸载它们。是否可以根据某些目标进行此操作,该目标在发生错误时必须重新制作?我知道在遇到错误时通常会停止处理配方。我提出的唯一可行的选择是执行子制作:
virtual_target:
sudo mount somelocation somepath ; \
$(MAKE) real_target ; \ ret=$$? \
sudo umount -fl somepath ; \
exit $$ret
real_target:
echo "Do something magical"
答案 0 :(得分:0)
我通过不将位置作为目标安装来解决它,而是创建一个宏来安装它们。然后我在配方中设置一个陷阱,在退出时卸载它们:
target:
trap "$(umount)" EXIT ; \
$(mount) && \
echo "Do something magical"
touch $@