我有几个可能包含子目录的目录,如果该目录中的任何文件发生更改,我会将每个目录压缩到一个文件中。
例如,我有2个目录dir1 dir2,我想将它们压缩为comp_dir1.tar.gz和comp_dir2.tar.gz。
我写了以下代码:
comp_%.tar.gz : %/$(shell find % -name "*")
tar -czvf $@ $<
但是我得到了错误:
find: ‘%’: No such file or directory
很明显,我不能在shell命令中使用“%”。
有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
在任何情况下,您需要的是要压缩的目录列表。使用它,您可以使用GNU Make功能Remaking Makefiles生成“依赖文件”,其中包括在这些目录中找到的所有文件。这是一个有效的例子:
DIRECTORIES:=dir1 dir2
ARCHIVES:=$(addsuffix .tar.gz,$(addprefix comp_,$(DIRECTORIES)))
all: $(ARCHIVES)
comp_%.tar.gz.d: %
echo $(@:.d=) $(@): $(shell find $< -name "*") > $(@)
# include the dependency files, this will cause GNU make to attempt creating
# them using the above pattern rule.
-include $(addsuffix .d,$(ARCHIVES))
comp_%.tar.gz: %
tar czvf $@ $<
.PHONY: all