我的makefile:
make:
# Mount Loader.bin
sudo mount -t vfat -o loop Boot.img mnt
sudo cp Loader.bin mnt
sudo umount mnt
但是,结果显示“目标忙”的错误
$ make make
sudo mount -t vfat -o loop Boot.img mnt
[sudo] password for shore:
sudo cp Loader.bin mnt
sudo umount mnt
umount: /home/shore/MineOS/mnt: target is busy.
makefile:7: recipe for target 'make' failed
make: *** [make] Error 32
它随机发生,我想主要的想法是在复制过程中执行unmouont。
因此,我想问一下它是否会等待上一个命令完成然后执行下一个命令
顺便说一句,我的平台是Ubuntu 18.4
非常感谢!!
make只能在一次配方中运行一行,并且在运行下一行之前总是等待上一行完成。它必须等待,因为如果当前行失败,配方必须失败而不启动下一行。
可能发生的是cp
正在退出,但数据尚未完全刷新到已挂载的文件系统:内核仍在写出缓冲的数据。因此,即使复制命令已完成,分区仍然处于忙碌状态。
也许你可以强迫它使用类似的东西进行同步(这里我假设你使用的是GNU / Linux或兼容的东西):
make:
# Mount Loader.bin
sudo mount -t vfat -o loop Boot.img mnt
sudo cp Loader.bin mnt
sudo sync -f mnt/Loader.bin
sudo umount mnt
我不知道这是否足以强迫它。
顺便说一下,当你在makefile或任何其他非交互式环境中使用sudo -n
时,使用sudo
通常是一个好主意。