我的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 <$< >$@.tar.gz \
${CLOSURE_BASE_URL}/compiler-${CLOSURE_VERSION}.tar.gz
tar -zxf $@.tar.gz closure-compiler-v${CLOSURE_VERSION}.jar
mv closure-compiler-v${CLOSURE_VERSION}.jar $@
rm $@.tar.gz
这里,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 :(得分:1)
看起来tar -x
会保留所包含文件的时间戳。
将其添加到食谱中。
touch $@