我有这个简单的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
?
答案 0 :(得分:2)
通过使dir_a
依赖于您所告知的存档,如果它比存档旧,则重新运行配方,除非您触摸文件夹或文件夹中的某些文件,否则它将始终为真在提取它之后,因为默认情况下tar会保留原始文件的时间戳。
--touch
/ -m
标志强制tar将时间戳设置为提取文件时的时间戳,而不是归档时间戳。我也冒昧地整理了几件事。
.PHONY: all
all: dir_a dir_b
dir_a dir_b: %: %.tar.gz
tar xmf $<