在 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 && \
    ...