Makefile:生成所有子文件夹的zip文件

时间:2015-03-03 23:38:13

标签: makefile

我试图转离我的ad-hoc构建脚本,该脚本遍历项目主页的所有子项,并为每个子项创建相应的zip文件:

for i in */; do
    if [[ -d $i ]]; then
        echo "Processing folder $i";
        zip "${i%/}.zip" "$i"*.txt
        echo "Created ${i%/}.zip"
    fi
done;

第一行是笨重的,但它只是遍历所有子目录,不包括隐藏的子行。正如您所看到的那样,逻辑很简单,但在Makefile中执行此操作而不显式指定每个子目录似乎很困难。

理想情况下,我们应该从:

开始
project
  subdir1
    file1.txt
    file2.txt
  subdir2
    file3.txt

...最后:

project
  subdir1
    file1.txt
    file2.txt
  subdir1.zip
  subdir2
    file3.txt
  subdir2.zip

有没有办法安全地从make中获得这种递归?

编辑:清理基本脚本,谢谢Etan

1 个答案:

答案 0 :(得分:3)

这样的事情可能会做你想要的。

SUBDIRS := $(wildcard */)
ZIPS := $(addsuffix .zip,$(subst /,,$(SUBDIRS)))

$(ZIPS) : %.zip : | %
    zip $@ $*/*.txt

dist: $(ZIPS)

您可能需要调整该静态模式规则等的先决条件,以获得正确的重建行为(应该在需要重建时进行检测,如果它始终重建,应该在.zip时永远不会重建文件存在等)。