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