为什么这个makefile配方总是运行?

时间:2016-11-24 18:15:59

标签: 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 <$< >$@.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时不执行这个配方。

我有什么问题?

1 个答案:

答案 0 :(得分:1)

看起来tar -x会保留所包含文件的时间戳。

将其添加到食谱中。

touch $@