5

我有.haml文件并希望将它们自动转换为文件并在更改.html时更新后者。.haml

通用的 makefile 规则是没有问题的:

%.html: %.haml
    hamlpy $< $@

但现在我需要一个规则或命令来执行以下操作:

  • 找到所有X.haml文件templates/
  • 执行make X.html命令,其中 X 是相同的文件名(haml替换为html)。

我找不到如何使用 GNU Make 或 Unix find 来做到这一点。

4

2 回答 2

8

如果你所有的*.haml文件都是好名字(即没有空格或其他有趣的字符),你可以通过调用来做到这一点find(1)

HAML_FILES = $(shell find templates/ -type f -name '*.haml')
HTML_FILES = $(HAML_FILES:.haml=.html)

all: $(HTML_FILES)

%.html : %.haml
        hamlpy $< $@
于 2012-07-30T12:18:11.310 回答
8

您可以使用 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=.
于 2012-07-30T11:52:03.967 回答