Makefile中的MD5SUM

时间:2011-05-05 22:40:08

标签: linux makefile md5sum

我正在尝试在Makefile中生成文件的MD5校验和。在我的Makefile中,我有类似的东西;

CHECKSUM = md5sum $(myfile)

但是变量CHECKSUM总是空的

有人可以告诉我这里有什么问题吗?

5 个答案:

答案 0 :(得分:1)

正如克里斯所说,你需要这样的东西:

CHECKSUM=$(md5sum $(myfile))

如果您不知道,CHECKSUM将仅在该行上可用。即以下将输出一个空白链接:

test:
    CHECKSUM=$(md5sum $(myfile))
    echo $$CHECKSUM

以下将满足您的需求:

test:
    CHECKSUM=$(md5sum $(myfile)); echo $$CHECKSUM

或者,如果您需要多行

test:
    CHECKSUM=$(md5sum $(myfile)); \
    echo $$CHECKSUM; \
    echo $$CHECKSUM;

如果您剪切n粘贴上面的内容,则需要插入标签。

答案 1 :(得分:1)

您是否需要makefile中命令部分之外的命令结果?
然后,如果您的makeGNU-make,则$(shell)功能可用 例如:

CHECKSUM := $(shell md5sum $(myfile))

答案 2 :(得分:1)

这对我有用:

NOW=$$(date)
print-now:
    @echo $(NOW)
md5sum:
    @SUM=$$(md5sum file.txt | cut -d' ' -f 1); \
    echo $$SUM; \
    cp file.txt file.$${SUM}.txt; \

现在使用make md5sum运行它。

您应该获得文件file.<sum>.txt

如果从上面复制代码,请记住使用tab缩进或从存储库https://github.com/rofrol/makefile-md5sum中获取文件。

答案 3 :(得分:0)

这是一个稍微不同的示例,我将预期的md5值设置为make变量,然后在我的配方中的shell命令中检查它。在这种情况下,我想下载特定版本的Anaconda并在安装之前检查它的md5sum。

生成文件:

SHELL:=/bin/bash
ANACONDA_MD5:=c989ecc8b648ab8a64731aaee9ed2e7e

none:

Anaconda3-5.0.1-Linux-x86_64.sh: 
    wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh

download: Anaconda3-5.0.1-Linux-x86_64.sh

verify: download
    AnacondaMD5="$$(md5sum Anaconda3-5.0.1-Linux-x86_64.sh | cut -d ' ' -f1)" && \
    if [ "$$AnacondaMD5" == '$(ANACONDA_MD5)' ]; then echo "md5sum matches"; fi

输出:

$ make verify
wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
--2018-01-16 18:11:50--  https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
Resolving repo.continuum.io... 104.16.18.10, 104.16.19.10, 2400:cb00:2048:1::6810:130a, ...
Connecting to repo.continuum.io|104.16.18.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 550796553 (525M) [application/x-sh]
Saving to: `Anaconda3-5.0.1-Linux-x86_64.sh'

100%[====================================================================================================================>] 550,796,553  103M/s   in 6.8s

2018-01-16 18:11:59 (77.0 MB/s) - `Anaconda3-5.0.1-Linux-x86_64.sh' saved [550796553/550796553]

AnacondaMD5="$(md5sum Anaconda3-5.0.1-Linux-x86_64.sh | cut -d ' ' -f1)" && \
    if [ "$AnacondaMD5" == 'c989ecc8b648ab8a64731aaee9ed2e7e' ]; then echo "md5sum matches"; fi
md5sum matches

请注意使用$$AnacondaMD5填充内联bash变量与使用$(ANACONDA_MD5)填充make变量

版本:

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-redhat-linux-gnu

答案 4 :(得分:0)

有关文件列表,您可以在Makefile中关注

FILES=foo/bar/image.svg \
    foo/bar3/somejs.js \
    foo/bar1/someimage.svg \
    foo/bar2/anotherjs.js \
    foo/somestyle.css \
    html/block/somepng.png

checksum:
    for f in $(FILES); do \
    echo "file: $$f"; \
    SUM=$$(md5sum $$f | cut -d' ' -f 1); \
    echo "CHECKSUM: $$SUM"; \
    done