5

私は.hamlファイルを持っていて、それらを自動的にファイルに変換し、変更され.htmlたときに後者を更新したいと思っています.haml

一般的なmakefileルールは問題ありません。

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

しかし今、私は以下を行うためのルールまたはコマンドが必要です:

  • X.haml内のすべてのファイルを検索templates/
  • コマンドを実行make X.htmlします。ここで、Xは同じファイル名です(hamlに置き換えられますhtml)。

GNUMakeまたはUnixfindでこれを行う方法が見つかりません。

4

2 に答える 2

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 に答える
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 に答える