2016-08-01 10 views
1

Ich habe diese einfache Make-Datei:Makefile remaking Verzeichnis Ziel

% cat Makefile 
all: dir_a dir_b 

dir_a: dir_a.tar.gz 
     tar xf dir_a.tar.gz 

dir_b: 
     tar xf dir_b.tar.gz 

Alle Ziele sind bereits erstellt:

% ls 
dir_a dir_a.tar.gz dir_b dir_b.tar.gz Makefile 

Aber wenn ich make laufen hält den Wiederaufbau dir_a Ziel:

% make 
tar xf dir_a.tar.gz 
% make 
tar xf dir_a.tar.gz 

Der einzige Unterschied ist, dass dir_a hat TAR-Datei als Abhängigkeit angegeben. Diese TAR-Datei wird nicht geändert. Irgendwelche Gründe, die es wieder herstellt dir_a?

Antwort

1

Indem Sie dir_a von dem Archiv abhängig machen, sagen Sie make, das Rezept erneut auszuführen, wenn es älter ist als das Archiv, das immer wahr ist, wenn Sie einige der Dateien im Ordner oder den Ordner selbst nach dem Extrahieren berühren Es wird standardmäßig die ursprüngliche Datei Zeitstempel beibehalten.

Das Flag --touch/-m zwingt tar, die Zeitstempel festzulegen, zu denen die Dateien extrahiert wurden, und nicht die Archivzeitstempel. Ich habe mir auch die Freiheit genommen, ein paar Dinge aufzuräumen.

.PHONY: all 
all: dir_a dir_b 

dir_a dir_b: %: %.tar.gz 
     tar xmf $< 
+0

Vielen Dank. 'tar xmf' hat es behoben. – mishik