Makefile重制目录

时间:2016-08-01 09:32:36

标签: makefile gnu-make

我有这个简单的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 个答案:

答案 0 :(得分:2)

通过使dir_a依赖于您所告知的存档,如果它比存档旧,则重新运行配方,除非您触摸文件夹或文件夹中的某些文件,否则它将始终为真在提取它之后,因为默认情况下tar会保留原始文件的时间戳。

--touch / -m标志强制tar将时间戳设置为提取文件时的时间戳,而不是归档时间戳。我也冒昧地整理了几件事。

.PHONY: all
all: dir_a dir_b

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