Eu tenho um makefile que uso para converter arquivos markdown em .pdf por meio de um modelo de látex. No momento, isso só funciona com um arquivo por vez. No entanto, eu gostaria que o makefile fosse executadoqualquerarquivo markdown no diretório ativo e saída para um .pdf com o mesmo nome com um único comando make. Por exemplo, eu poderia ter o seguinte:
Foo.md ---> Foo.pdf
Barra.md ---> Barra.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...
Responder1
Experimente 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
Responder2
Não testei isso completamente, mas acho que deve funcionar com algumas modificações. Usando o 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 esta solução não produzirá pdf
arquivos exatamente com o mesmo nome dos md
arquivos:
foo.md -> foo.md.pdf
Não deve ser difícil de consertar.
Responder3
# 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