【问题标题】:MD5SUM in a MakefileMakefile 中的 MD5SUM
【发布时间】:2011-05-05 22:40:07
【问题描述】:

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

CHECKSUM=md5sum $(myfile)

但变量 CHECKSUM 始终为空

谁能告诉我这里出了什么问题?

【问题讨论】:

    标签: linux makefile md5sum


    【解决方案1】:

    这是一个稍微不同的示例,我将预期的 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
    

    【讨论】:

    • 单个= 而不是==: if [ "$$AnacondaMD5" = '$(ANACONDA_MD5)' ];
    • 我在这里使用SHELL:=/bin/bash 所以== is ok
    【解决方案2】:

    正如 Chris 所说,您需要这样的东西:

    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粘贴上面的,你需要插入标签。

    【讨论】:

      【解决方案3】:

      您是否需要makefile 中的命令部分之外的命令结果?
      那么,如果您的makeGNU-make,则$(shell) 函数可用。
      例如:

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

      【讨论】:

        【解决方案4】:

        这对我有用:

        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 进行缩进或从 repo https://github.com/rofrol/makefile-md5sum 获取文件。

        【讨论】:

          【解决方案5】:

          有关 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-24
            • 1970-01-01
            • 2018-10-28
            • 2015-09-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多