md5sum在Makefile指令中更改目录后找不到文件
我在使用makefile生成包含md5sum文件的包时遇到问题 我确实找到了解决办法,但我并不满意 这是我的makefile工作原理的一个示例,它可以用来重现我在md5sum在Makefile指令中更改目录后找不到文件,makefile,md5sum,Makefile,Md5sum,我在使用makefile生成包含md5sum文件的包时遇到问题 我确实找到了解决办法,但我并不满意 这是我的makefile工作原理的一个示例,它可以用来重现我在file1中遇到的问题,以及我在file2中的解决方法 VERSION:=1 DIR:=tmp file: #rule to build the file with current version tag touch $(DIR)/file-$(VERSION) $(DIR)/
file1
中遇到的问题,以及我在file2
中的解决方法
VERSION:=1
DIR:=tmp
file: #rule to build the file with current version tag
touch $(DIR)/file-$(VERSION)
$(DIR)/file1.tar:file #rule that fails to create the md5 file
cd $(DIR)
md5sum -b \
file-$(VERSION) \
>> file-$(VERSION).md5
tar -cf $@ \
file-$(VERSION) \
file-$(VERSION).md5
cd -
$(DIR)/file2.tar:file #workaround that fails to create the md5 file
md5sum -b \
$(DIR)/file-$(VERSION) \
>> $(DIR)/file-$(VERSION).md5
tar -cf $@ -C $(DIR) \
file-$(VERSION) \
file-$(VERSION).md5
file1: $(DIR) $(DIR)/file1.tar
file2: $(DIR) $(DIR)/file2.tar
$(DIR):
mkdir -p $(DIR)
运行file1
,生成失败,我得到以下输出:
:~/tmp$ make file1
mkdir -p tmp
touch tmp/file-1
cd tmp
md5sum -b \
file-1 \
>> file-1.md5
md5sum: file-1: No such file or directory
Makefile:8: recipe for target 'tmp/file1.tar' failed
make: *** [tmp/file1.tar] Error 1
运行file2
,文件成功生成:
:~/tmp$ make file2
touch tmp/file-1
md5sum -b \
tmp/file-1 \
>> tmp/file-1.md5
tar -cf tmp/file2.tar -C tmp \
file-1 \
file-1.md5
我的问题是,当
md5sum
工具用作Makefile
指令时,为什么调用cd dir
后,它在运行的目录中找不到该文件?或者,我遗漏了什么?配方中的每一行都由单独的shell调用执行。因此,您的cd$(DIR)
行由一个shell执行,对另一个shell执行的下一行(md5sum…
)没有影响。在您的情况下,一个简单的解决方案是链接所有命令,以便make将它们视为一行,并由同一个shell执行:
target: prerequisites
cd here; \
do that; \
...
或:
配方中的每一行都由单独的shell调用执行。因此,您的
cd$(DIR)
行是由一个shell执行的,对另一个shell执行的下一行(md5sum…
)没有任何影响。@RenaudPacalet,谢谢。我习惯于看到cd
和cd-
总是在同一行,但从来没有想过这是一个要求。刚刚添加了“;”在每一条指令的末尾,它将被解释为一行,并且它现在正在工作。你能回答这个问题让我接受吗?问题回答了。请注意,根据命令失败时希望发生的情况,还可以使用&&
或|
链接命令。
target: prerequisites
cd here && \
do that && \
...