2016-08-01 76 views
1

我有這個簡單的makefile:的Makefile再造目錄目標

% 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 

所有的目標都已經創建:

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

但是當我運行make它使重建dir_a目標:

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

唯一的區別是dir_a已tar文件指定爲依賴項。這個tar文件沒有改變。它不斷重拍的任何原因dir_a

回答

1

通過使dir_a取決於您正在講述的檔案,如果檔案比檔案更舊,則重新運行檔案,除非您在提取檔案後觸摸文件夾內部的某些文件或文件夾本身,否則將始終爲真它,因爲默認情況下焦油將保留原始文件時間戳。

--touch/-m標誌強制tar設置提取文件時的時間戳,而不是歸檔時間戳。我也冒着收拾一些東西的自由。

.PHONY: all 
all: dir_a dir_b 

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

謝謝。 'tar xmf'修復了它。 – mishik