不要在pdf之前建立点文件

时间:2019-02-03 04:12:58

标签: makefile latex

我具有项目的当前文件夹结构

.
├── Makefile
└── S6
    ├── CD_CS304.md
    ├── CN_CS306.md
    ├── DAA_CS302.md
    └── graphviz
        └── cs304_compilerphases.dot

2 directories, 5 files

我正在为每个markdown文件构建单独的pdf,这是我的Makefile

# Generate PDFs from the Markdown source files
#
# In order to use this makefile, you need some tools:
# - GNU make
# - Pandoc

# All markdown files are considered sources
MD_SOURCES := $(wildcard **/*.md)
OUTPUT_PDFS := $(MD_SOURCES:.md=.pdf)
DOT_SOURCES := $(wildcard **/*.dot)
OUTPUT_DOTPNGS := $(DOT_SOURCES:.dot=.png)

all: $(OUTPUT_DOTPNGS) $(OUTPUT_PDFS) 

# Recipe for building png files from dot files
%.png: %.dot
    dot \
        -Tpng $< \
        -o $@

# Recipe for converting a Markdown file into PDF using Pandoc
%.pdf: %.md
    pandoc \
        --variable fontsize=12pt \
        --variable date:"\today" \
        --variable geometry:a4paper \
        --variable documentclass:book \
        --table-of-contents \
        --number-sections \
        --filter pandoc-fignos \
        -f markdown  $< \
        -o $@


.PHONY : clean

clean: $(OUTPUT_PDFS) $(OUTPUT_DOTPNGS)
    $(RM) $^

我想将点程序的输出嵌入到乳胶pdf中,但是在这里Makefile不会将点文件转换为png,而是直接编译pdf。

由于png文件不存在,这会使pdf编译出错。

1 个答案:

答案 0 :(得分:1)

如果要确保先构建一个文件,则添加一个依赖项。

更改此:

%.pdf: %.md

对此:

%.pdf: %.md $(OUTPUT_DOTPNGS)

此依赖项说:“除非已构建每个png文件,否则不要构建此pdf文件。”