我开发了一个脚本,将文件夹中的所有 Markdowns 文件转换为 ePub,并将它们放入 epubs 中。
尽管如此,我想将文件放在 markdowns 子文件夹中,而不是放在主目录(makefile 所在的目录)中。
.
├── epubs
│ └── blabla.epubs
├── makefile
└── markdowns
└── blabla.pd
我应该如何修改我的代码?
MARKDOWN=$(shell find . -iname "*.pd")
EPUBS=$(MARKDOWN:.pd=.epub)
.PHONY = all clean
all: $(EPUBS)
%.epub: %.pd
pandoc --from markdown --to epub --smart $< -o epubs/$@
clean:
rm epubs/*
请您参考如下方法:
一种方法是在模式规则中明确告诉 make .pd 的先决条件 .epub 目标所在的位置:
MARKDOWN_DIR := markdowns
EPUB_DIR := epubs
MARKDOWNS := $(wildcard $(MARKDOWN_DIR)/*.pd)
EPUBS := $(subst $(MARKDOWN_DIR),$(EPUB_DIR),$(MARKDOWNS:.pd=.epub))
$(EPUB_DIR)/%.epub: $(MARKDOWN_DIR)/%.pd
pandoc --from markdown --to epub --smart $< -o $@
.PHONY: all clean
all: $(EPUBS)
请注意两个小的额外更改。我用 make 的 $(wildcard) 函数替换了 shell find 命令,因为这就是它的用途。您的 pandoc 命令不再需要 $@ 前面的 epubs/ ,因为该目录现在是目标的一部分。我根据自己的喜好重新排序了一些。
