我正在尝试使用Makefile在许多Markdown文件中的任何一个更改时编译PDF:
# Compile report
source := draft
output := dist
sources := $(wildcard $(source)/*.md)
objects := $(patsubst %.md,%.pdf,$(subst$(source),$(output),$(sources)))
all: $(objects)
report-print.md: $(source)/%.md
cat draft/*.md | pandoc \
--variable geometry:a4paper \
--number-sections \
--toc \
--f markdown \
-s \
-o dist/report-print.pdf \
.PHONY : clean
clean:
rm -f $(output)/*.pdf
我收到错误:
make: *** No rule to make target `dist/01-title.pdf', needed by `all'. Stop.
文件draft/01-title.md
是其中一个源文件。
答案 0 :(得分:3)
您没有从一个.pdf
文件创建一个.md
文件的规则。这很好,因为那不是你想要做的。您想要从所有 pdf
文件创建单个.md
文件(据我了解)。所以,抛弃所有objects
的东西;您不需要创建所有这些单独的pdf
文件。
还有许多其他小问题:您没有创建与目标相同的文件名(report-print.md
与$(output)/report-print.pdf
),您应该使用自动变量等。)
你的makefile只是:
source := draft
output := dist
sources := $(wildcard $(source)/*.md)
all: $(output)/report-print.pdf
$(output)/report-print.pdf: $(sources)
cat $^ | pandoc \
--variable geometry:a4paper \
--number-sections \
--toc \
--f markdown \
-s \
-o $@
.PHONY : clean
clean:
rm -f $(output)/*.pdf