2012-07-30 46 views
5

Tengo .haml archivos y quiero convertirlos automáticamente a los archivos .html y actualizar el último cuando se cambia .haml.Unix find with GNU Make para actualizar automáticamente los archivos

La norma makefile genérica no es un problema:

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

pero ahora necesito una regla o un comando para hacer lo siguiente:

  • encontrar todos X.haml archivos en templates/
  • ejecutar make X.html comando, donde X es el mismo nombre de archivo (haml se reemplaza por html).

No puedo encontrar cómo hacer esto con GNU Make o Unix find.

Respuesta

8

Si todos los archivos son *.haml nombre bien (es decir, sin espacios u otros caracteres extraños), puede hacerlo con una llamada a 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

Puede usar GNU hacer wildcard función para encontrar archivos en un determinado directorio:

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 

INDIR y OUTDIR se puede personalizar en la línea de comandos, por ejemplo, para usar el directorio actual para las entradas y iutputs:

$ make INDIR=. OUTDIR=. 
+0

¿Qué pasa si pueden ser más profundos que 'templates'? –

+0

Lo anterior asume que los archivos '.haml' están todos en una carpeta sin importar la profundidad, p. Ej. 'templates/a/b/c/d/e /'. –

Cuestiones relacionadas