2016-11-24 5 views
0

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?

+0

Machen Sie '-d' und sehen Sie, was das Ziel aktualisiert. –

+0

'Voraussetzung 'build/src/hashes/closure-compiler-20161024.tar.gz.sha256' ist neuer als das Ziel 'build/bin/closure-compiler.jar'' was albern ist – spraff

Antwort

1

Sieht aus wie tar -x bewahrt die Zeitstempel der enthaltenen Dateien.

Fügen Sie diese zu dem Rezept hinzu.

touch [email protected]