Makefile用于将Markdown文件编译为单个PDF

时间:2015-03-17 10:30:29

标签: makefile

我正在尝试使用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是其中一个源文件。

1 个答案:

答案 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