Makefile:生成所有子文件夹的 zip 文件
Makefile: Generating zip files of all sub folders
我正在尝试从我的临时构建脚本过渡,该脚本遍历项目主目录的所有子项,并为每个子项创建一个相应的 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
类似这样的东西可能会满足您的需求。
SUBDIRS := $(wildcard */)
ZIPS := $(addsuffix .zip,$(subst /,,$(SUBDIRS)))
$(ZIPS) : %.zip : | %
zip $@ $*/*.txt
dist: $(ZIPS)
您可能需要调整该静态模式规则的先决条件等以获得正确的重建行为(应该检测何时需要重建,是否应该始终重建,是否应该在 .zip
文件存在等)。
我正在尝试从我的临时构建脚本过渡,该脚本遍历项目主目录的所有子项,并为每个子项创建一个相应的 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
类似这样的东西可能会满足您的需求。
SUBDIRS := $(wildcard */)
ZIPS := $(addsuffix .zip,$(subst /,,$(SUBDIRS)))
$(ZIPS) : %.zip : | %
zip $@ $*/*.txt
dist: $(ZIPS)
您可能需要调整该静态模式规则的先决条件等以获得正确的重建行为(应该检测何时需要重建,是否应该始终重建,是否应该在 .zip
文件存在等)。