![Ausgabe in mehrere Dateien mit Makefile](https://rvso.com/image/89178/Ausgabe%20in%20mehrere%20Dateien%20mit%20Makefile.png)
Ich habe ein Makefile, mit dem ich Dateien in Markdown über eine Latex-Vorlage in .pdf konvertiere. Im Moment funktioniert dies nur mit jeweils einer Datei. Ich möchte jedoch, dass das Makefile ausgeführt wird aufbeliebigMarkdown-Datei im Active Directory und Ausgabe in eine .pdf mit demselben Namen mit einem einzigen Make-Befehl. Ich könnte beispielsweise Folgendes haben:
Foo.md ---> Foo.pdf
Bar.md ---> Bar.pdf
Mein aktuelles Makefile ist hier:
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
Vielen Dank für alle Hinweise ...
Antwort1
Versuche dies:
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
Antwort2
Ich habe es nicht vollständig getestet, aber ich denke, es sollte mit einigen Modifikationen funktionieren. Verwenden einer for-Schleife:
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
pdf
Beachten Sie auch, dass diese Lösung keine Dateien mit genau demselben Namen wie die folgenden Dateien erstellt md
:
foo.md -> foo.md.pdf
Sollte jedoch nicht schwer zu beheben sein.
Antwort3
# 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