2012-07-30 41 views
5

我有.haml文件,并希望将它们自动转换为.html文件,并在更改.haml时更新后者。Unix与GNU Make找到自动更新文件

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

%.html: %.haml 
    hamlpy $< [email protected] 

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

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

我无法找到如何使用GNU Make或Unix查找。

回答

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 $< [email protected] 
7

您可以使用GNU使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 $< [email protected] 

.PHONY : all clean 

INDIROUTDIR可以在命令行上进行定制,例如,用于输入和iutputs当前目录:

$ make INDIR=. OUTDIR=. 
+0

如果它们比'templates'更深,会怎么样? – 2012-07-30 11:57:26

+0

上面假定'.haml'文件都在一个文件夹中,不管文件夹有多深,例如'模板/ A/B/C/d/E /'。 – 2012-07-30 12:53:23