Saída para múltiplos arquivos com Makefile

3

Eu tenho um makefile que eu uso para converter arquivos em markdown em .pdf através de um modelo de látex. No momento, isso só funciona com um arquivo por vez. No entanto, eu gostaria que o makefile fosse executado em qualquer arquivo de marcação no diretório ativo e a saída para um .pdf com o mesmo nome com um único comando make. Por exemplo, posso ter o seguinte:

Foo.md --- > Foo.pdf

Bar.md --- > Bar.pdf

Meu makefile atual está aqui:

TEX = pandoc
MEXT = md
src = template.tex $(wildcard *.$(MEXT))
FLAGS = --latex-engine=xelatex

letter.pdf : $(src)
$(TEX) $(filter-out $<,$^ ) -o $@ --template=$< $(FLAGS)

.PHONY: clean
clean :
rm output.pdf

Obrigado por qualquer indicação ...

    
por Linter 22.06.2016 / 20:15

3 respostas

0
# List files to be made by finding all *.md files and appending .pdf

PDFS := $(patsubst %.md,%.md.pdf,$(wildcard *.md))

# The all rule makes all the PDF files listed
all : $(PDFS)

# This generic rule accepts PDF targets with corresponding Markdown 
# source, and makes them using pandoc
%.md.pdf : %.md
    pandoc --latex-engine=xelatex $< -o $@

# Remove all PDF outputs
clean :
    rm $(PDFS)

# Remove all PDF outputs then build them again
rebuild : clean all
    
por 30.08.2018 / 15:30
4

Tente isto:

TEX = pandoc
MEXT = md
SRC = $(wildcard *.$(MEXT))
PDFS = $(SRC:.md=.pdf)
TMP = template.tex
FLAGS = --latex-engine=xelatex

all:    ${PDFS}

%.pdf:  %.md ${TMP}
        ${TEX} $(filter-out $<,$^ ) -o $@ --template=${TMP} $(FLAGS) $<


.PHONY: clean
clean:
        rm *.pdf
    
por 22.06.2016 / 23:43
1

Eu não testei isso completamente, mas acho que deve funcionar com algumas modificações. Usando loop for:

TEX = pandoc
MEXT = md
SRC = $(wildcard *.$(MEXT))
TMP = template.tex
FLAGS = --latex-engine=xelatex

letter.pdf : 
    $(foreach i, $(SRC), $(TEX) -o $(i).pdf --template=$(TMP) $(FLAGS) $(i);)

.PHONY: clean
clean :
    rm -f *.pdf

Observe também que essa solução não produzirá pdf arquivos com exatamente o mesmo nome que md arquivos:

foo.md -> foo.md.pdf

Não deve ser difícil de corrigir.

    
por 22.06.2016 / 23:32

Tags