我的 Makefile 的行为绝对混乱:
我有用于备份的Makefile。备份目录的名称格式为:
2023-09-11
,包含 3 个磁盘映像文件,每个文件都有 sha256 校验和:
# ls -1 2023-09-11/
home.img
home.img.sha256
root.img
root.img.sha256
var.img
var.img.sha256
所以基本上,我首先从U盘传输备份目录,然后检查校验和是否正确:
这是我的 makefile:
all: rsync shasum
rsync:
@rsync -rt --delete /mnt/udisk/LAPTOP/ .
shasum: home root var
home:
@cd 20??-??-??/ && sha256sum -c home.img.sha256
root:
@cd 20??-??-??/ && sha256sum -c root.img.sha256
var:
@cd 20??-??-??/ && sha256sum -c var.img.sha256
当我运行它时,
rsync
目标成功完成并且字段被传输。然而,shasum
目标以最奇怪的方式挂起:它检查第一个校验和home
并打印OK。然后它永远挂起,什么也没有发生。 ps
确实显示了第二个目标 sha256sum -c root.img.sha256
但 CPU 使用率为 0%
0.0 0.0 /usr/bin/make
0.0 0.0 /bin/sh -c cd 20??-??-??/ && sha256sum -c root.img.sha256
0.0 0.0 sha256sum -c root.img.sha256
我的 Makefile 有什么问题?
在黑暗中猜测。但是您的
home
规则将 cd
放入子目录中,然后执行 sha256sum
命令。但在开始下一条规则之前,它实际上并没有移回父目录。 (即,您需要在每个 sha256sum 之后执行 cd ..
)。然后后续规则执行自己的 cd
命令,这可能会失败,因为 cwd 是您想要的位置。
老实说,在 Makefile 脚本中更改当前工作目录似乎有点容易出错。也许只使用完整路径?
home:
@sha256sum -c 20??-??-??/home.img.sha256
root:
@sha256sum -c 20??-??-??/root.img.sha256
var:
@sha256sum -c 20??-??-??/var.img.sha256