Mein Makefile lädt eine Reihe von Dateien von Drittanbietern herunter, wenn sie nicht lokal verfügbar sind. HierWarum läuft dieses Makefile-Rezept immer?
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
ist die gespeicherte Hash der Version der Datei, die wir bereits wissen, korrekt ist.
download-if-sha-matches <hash >outfile url
lädt die url
herunter und vergleicht ihren Hash mit stdin, schlägt fehl, wenn sie nicht übereinstimmen.
Dieses Rezept funktioniert, außer dass es immer ausgeführt wird, auch wenn build/bin/closure-compiler.jar
bereits existiert. Natürlich ist sein Zeitstempel später als der von $<
, also würde ich erwarten, dass das Rezept beim zweiten Mal nicht ausgeführt wird.
Was habe ich falsch verstanden?
Machen Sie '-d' und sehen Sie, was das Ziel aktualisiert. –
'Voraussetzung 'build/src/hashes/closure-compiler-20161024.tar.gz.sha256' ist neuer als das Ziel 'build/bin/closure-compiler.jar'' was albern ist – spraff