Makefile 改造目录目标

Makefile remaking directory target

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

所有 target 都已创建:

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

但是当我 运行 make 它不断重建 dir_a target:

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

唯一的区别是 dir_a 将 tar 文件指定为依赖项。此 tar 文件未更改。有什么理由一直在重制 dir_a?

通过使 dir_a 依赖于您告诉 make 的存档,如果它比存档旧,则重新 运行 配方,这将永远是正确的,除非您触摸某些文件解压后进入文件夹或文件夹本身,因为默认情况下 tar 将保留原始文件时间戳。

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

.PHONY: all
all: dir_a dir_b

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