aplica regras em uma lista de arquivos no GNU Make (ou 'for' no GNU Make)

1

Eu tenho estas regras no meu Makefile GNU:

FITXER = fitxa.md

$(FITXER).html: $(FITXER)
    pandoc --from markdown --to html $(FITXER) -o $(FITXER).html

$(FITXER).jpeg: $(FITXER).html
    wkhtmltoimage $(FITXER).html $(FITXER).jpeg

Existe alguma maneira de aplicar essas regras em uma lista de arquivos: por exemplo, algo parecido com isso (em pseudocódigo):

for FITXER in [fitxa.md, a.md, b.md, ...] do

   $(FITXER).html: $(FITXER)
    pandoc --from markdown --to html $(FITXER) -o $(FITXER).html

   $(FITXER).jpeg: $(FITXER).html
    wkhtmltoimage $(FITXER).html $(FITXER).jpeg
endfor
    
por somenxavier 18.11.2016 / 13:52

1 resposta

1

A maneira de fazer isso é definir as regras gerais de criação:

%.html: %.md
    pandoc --from markdown --to html $< -o $@

%.jpg: %.html
    wkhtmltoimage $< $@

Isso diz a make como criar arquivos HTML a partir de arquivos Markdown e, em seguida, como criar JPEGs a partir de arquivos HTML.

Uma vez feito isso, tudo o que é necessário é dizer a make todos os arquivos output que você procura:

all: fitxa.jpg a.jpg b.jpg

.PHONY: all

make all vai descobrir o que fazer para obter os arquivos JPEG solicitados.

Você ainda pode definir outras regras para processar arquivos Markdown específicos de uma maneira diferente:

foo.jpg: foo.md
    # Process foo.md here to build foo.jpg

Essas regras específicas têm precedência sobre as regras genéricas.

    
por 18.11.2016 / 14:13

Tags