在 Makefile 指令中更改目录后,md5sum 无法找到文件
md5sum fails to find file after changing dir in a Makefile instruction
我在使用 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.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
操作说明?或者,我缺少什么?
配方中的每一行都由单独的 shell 调用执行。因此,您的 cd $(DIR)
行由 shell 执行,并且对由另一个 shell 执行的下一行 (md5sum...
) 没有影响。在您的情况下,一个简单的解决方案包括链接所有命令,使它们被 make 视为单行并由相同的 shell:
执行
target: prerequisites
cd here; \
do that; \
...
或:
target: prerequisites
cd here && \
do that && \
...
我在使用 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.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
操作说明?或者,我缺少什么?
配方中的每一行都由单独的 shell 调用执行。因此,您的 cd $(DIR)
行由 shell 执行,并且对由另一个 shell 执行的下一行 (md5sum...
) 没有影响。在您的情况下,一个简单的解决方案包括链接所有命令,使它们被 make 视为单行并由相同的 shell:
target: prerequisites
cd here; \
do that; \
...
或:
target: prerequisites
cd here && \
do that && \
...