用于将标记文件编译为单个PDF的Makefile

用于将标记文件编译为单个PDF的Makefile,makefile,Makefile,当许多标记文件发生更改时,我尝试使用Makefile编译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

当许多标记文件发生更改时,我尝试使用Makefile编译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
是源文件之一。

您没有从一个
.md
文件创建一个
.pdf
文件的规则。这很好,因为那不是你想做的。您想从所有
.md
文件(据我所知)创建一个
pdf
文件。所以,抛弃所有的
对象
东西;您不需要创建所有这些单独的
pdf
文件

还有其他一些小问题:您没有创建与目标相同的文件名(
report print.md
vs.
$(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

您没有从一个
.md
文件创建一个
.pdf
文件的规则。这很好,因为那不是你想做的。您想从所有
.md
文件(据我所知)创建一个
pdf
文件。所以,抛弃所有的
对象
东西;您不需要创建所有这些单独的
pdf
文件

还有其他一些小问题:您没有创建与目标相同的文件名(
report print.md
vs.
$(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

这会产生一个错误:`cat draft/01-title.md draft/02-abstract.md draft/03-introduction.md draft/04-methods.md draft/05-results.md draft/06-discussion.md draft/07-Acknowledgets.md draft/08-Literature-Quied.md | pandoc \--变量几何:a4paper \--数字节\pandoc::openFile:不存在(没有这样的文件或目录)make:**[dist/report print.pdf]错误1`我无法在未格式化的评论中正确阅读该错误消息。您确定“--number节”之后的参数丢失了吗?否——toc等。?如果是这样,这可能意味着在--number sections行的反斜杠后面有多余的空格。记住,对于转义换行符,反斜杠必须是该行的最后一个字符;如果后面有空格,则反斜杠引用的是空格,而不是换行符。@MasScientist是的,是空白字符。现在可以用了,谢谢!这会产生一个错误:`cat draft/01-title.md draft/02-abstract.md draft/03-introduction.md draft/04-methods.md draft/05-results.md draft/06-discussion.md draft/07-Acknowledgets.md draft/08-Literature-Quied.md | pandoc \--变量几何:a4paper \--数字节\pandoc::openFile:不存在(没有这样的文件或目录)make:**[dist/report print.pdf]错误1`我无法在未格式化的评论中正确阅读该错误消息。您确定“--number节”之后的参数丢失了吗?否——toc等。?如果是这样,这可能意味着在--number sections行的反斜杠后面有多余的空格。记住,对于转义换行符,反斜杠必须是该行的最后一个字符;如果后面有空格,则反斜杠引用的是空格,而不是换行符。@MasScientist是的,是空白字符。现在可以用了,谢谢!