我有.haml
文件并希望将它们自动转换为文件并在更改.html
时更新后者。.haml
通用的 makefile 规则是没有问题的:
%.html: %.haml
hamlpy $< $@
但现在我需要一个规则或命令来执行以下操作:
- 找到所有
X.haml
文件templates/
- 执行
make X.html
命令,其中 X 是相同的文件名(haml
替换为html
)。
我找不到如何使用 GNU Make 或 Unix find 来做到这一点。
如果你所有的*.haml
文件都是好名字(即没有空格或其他有趣的字符),你可以通过调用来做到这一点find(1)
:
HAML_FILES = $(shell find templates/ -type f -name '*.haml')
HTML_FILES = $(HAML_FILES:.haml=.html)
all: $(HTML_FILES)
%.html : %.haml
hamlpy $< $@
您可以使用 GNU makewildcard
函数在某个目录中查找文件:
INDIR := templates
OUTDIR := ${CURDIR}
haml_files := $(wildcard ${INDIR}/*.haml)
html_files := $(subst ${INDIR}/,${OUTDIR}/,${haml_files:.haml=.html})
all : ${html_files}
clean :
rm -f ${html_files}
${OUTDIR}/%.html : ${INDIR}/%.haml
hamlpy $< $@
.PHONY : all clean
INDIR
并且OUTDIR
可以在命令行上自定义,例如,使用当前目录作为输入和输入输出:
$ make INDIR=. OUTDIR=.