![Вывод в несколько файлов с помощью Makefile](https://rvso.com/image/89178/%D0%92%D1%8B%D0%B2%D0%BE%D0%B4%20%D0%B2%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Makefile.png)
У меня есть makefile, который я использую для конвертации файлов в markdown в .pdf через шаблон latex. На данный момент это работает только с одним файлом за раз. Однако я хотел бы, чтобы makefile запускался налюбойфайл markdown в активном каталоге и вывод в .pdf с тем же именем с помощью одной команды make. Например, у меня может быть следующее:
Foo.md ---> Foo.pdf
Бар.md ---> Бар.pdf
Мой текущий makefile здесь:
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
Спасибо за любые указания...
решение1
Попробуй это:
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
решение2
Я не тестировал это полностью, но думаю, что это должно работать с некоторыми изменениями. Использование цикла 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
Также обратите внимание, что это решение не создаст pdf
файлы с точно такими же именами, как md
у файлов:
foo.md -> foo.md.pdf
Хотя это не должно быть сложно исправить.
решение3
# 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