![Salida a múltiples archivos con Makefile](https://rvso.com/image/89178/Salida%20a%20m%C3%BAltiples%20archivos%20con%20Makefile.png)
Tengo un archivo MAKE que uso para convertir archivos en rebajas a .pdf a través de una plantilla de látex. Por el momento, esto sólo funciona con un archivo a la vez. Sin embargo, me gustaría que el archivo MAKE se ejecutecualquierarchivo de rebajas en el directorio activo y salida a un .pdf con el mismo nombre con un solo comando make. Por ejemplo, podría tener lo siguiente:
Foo.md ---> Foo.pdf
Barra.md ---> Barra.pdf
Mi archivo MAKE actual está aquí:
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
Gracias por cualquier consejo...
Respuesta1
Prueba esto:
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
Respuesta2
No lo probé completamente pero creo que debería funcionar con alguna modificación. Usando bucle 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
También tenga en cuenta que esta solución no generará pdf
archivos con exactamente el mismo nombre que md
los archivos:
foo.md -> foo.md.pdf
Sin embargo, no debería ser difícil de solucionar.
Respuesta3
# 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