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.
Что я получил неправильно?
Сделайте 'make -d' и посмотрите, что заставляет цель обновляться. –
'Prerequisite 'build/src/hashes/close-compiler-20161024.tar.gz.sha256' новее, чем target 'build/bin/clos-compiler.jar'', что глупо – spraff