MD5SUM в Makefile - PullRequest
       9

MD5SUM в Makefile

0 голосов
/ 06 мая 2011

Я пытаюсь сгенерировать контрольную сумму MD5 файла в Makefile. В моем Makefile у меня есть что-то вроде:

CHECKSUM = md5sum $ (myfile)

Но переменная CHECKSUM всегда пуста

Кто-нибудь может сказать мне, что здесь не так?

Ответы [ 4 ]

1 голос
/ 15 мая 2019

Это работает для меня:

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.

1 голос
/ 06 мая 2011

Нужен ли вам результат команды за пределами командной части в makefile?
Затем, если ваш make равен GNU-make, доступна функция $(shell).
Например:

CHECKSUM := $(shell md5sum $(myfile))
1 голос
/ 06 мая 2011

Как говорит Крис, вам нужно что-то вроде:

CHECKSUM=$(md5sum $(myfile))

В случае, если вы не знали, CHECKSUM будет доступен только в этой строке.то есть следующее выведет пустую ссылку:

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

Следующее будет делать то, что вам нужно:

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

Или, если вам нужно несколько строк

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

Если вы вырезали и вставили выше, вам нужно вставить вкладки.

0 голосов
/ 17 января 2018

Вот немного другой пример, где я устанавливаю ожидаемое значение md5 в качестве переменной make, а затем проверяю его в командах оболочки в моем рецепте.В этом случае я хотел скачать определенную версию Anaconda и проверить ее md5sum перед установкой.

Makefile:

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
...