2016-11-24 3 views
0

My Makefile загружает несколько сторонних файлов, если они не доступны локально.Почему рецепт makefile всегда запускается?

CLOSURE_VERSION=20161024 
CLOSURE_BASE_URL="http://dl.google.com/closure-compiler" 

build/bin/closure-compiler.jar: build/src/hashes/closure-compiler-${CLOSURE_VERSION}.tar.gz.sha256 
    download-if-sha-matches <$< >[email protected] \ 
     ${CLOSURE_BASE_URL}/compiler-${CLOSURE_VERSION}.tar.gz 
    tar -zxf [email protected] closure-compiler-v${CLOSURE_VERSION}.jar 
    mv closure-compiler-v${CLOSURE_VERSION}.jar [email protected] 
    rm [email protected] 

Здесь build/src/hashes/closure-compiler-${CLOSURE_VERSION}.tar.gz.sha256 это сохраненное хэш версии файла, который мы уже знаем, является правильным.

download-if-sha-matches <hash >outfile url загружает url и сравнивает его хэш с stdin, если они не совпадают.

Этот рецепт работает, за исключением того, что он всегда работает, даже если build/bin/closure-compiler.jar уже существует. Естественно, его временная метка позже, чем у $<, поэтому я ожидаю, что это не будет выполнять рецепт во второй раз, когда я запустил make.

Что я получил неправильно?

+0

Сделайте 'make -d' и посмотрите, что заставляет цель обновляться. –

+0

'Prerequisite 'build/src/hashes/close-compiler-20161024.tar.gz.sha256' новее, чем target 'build/bin/clos-compiler.jar'', что глупо – spraff

ответ

1

Похож, что tar -x сохраняет метки времени, содержащиеся в файлах.

Добавьте это к рецепту.

touch [email protected] 
Смежные вопросы