我有一个 makefile,用于通过乳胶模板将 markdown 中的文件转换为 .pdf。目前,这一次仅适用于一个文件。但是,我希望 makefile 能够运行任何活动目录中的 markdown 文件,并使用单个 make 命令输出到具有相同名称的 .pdf。例如,我可能有以下内容:
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