Unix用GNU Make查找自动更新文件

cul*_*rón 5 unix haml makefile find

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

通用makefile规则没问题:

%.html: %.haml
    hamlpy $< $@
Run Code Online (Sandbox Code Playgroud)

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

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

我找不到如何使用GNU Make或Unix查找.

Max*_*kin 8

您可以使用GNU make wildcard函数查找某个目录中的文件:

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
Run Code Online (Sandbox Code Playgroud)

INDIR并且OUTDIR可以在命令行上进行自定义,例如,将当前目录用于输入和输出:

$ make INDIR=. OUTDIR=.
Run Code Online (Sandbox Code Playgroud)


Tho*_*hor 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 $< $@
Run Code Online (Sandbox Code Playgroud)