我想使用 make 来处理任意目录树(源)的内容,并创建另一个与源树结构相同的目录树(目标)。
源树的子目录包含以.md(降价文本)结尾的文件。目标是使用pandoc为源树中的每个文件在目标树中创建一个.html文件。
this thread中的以下代码转换同一树中的文件,但我不知道如何修改它,因此它将生成的文件放在另一个树中。
markdown := $(shell find . -name '*.md')
all: $(patsubst %.md, %.pdf, $(markdown))
%.pdf: %.md
pandoc -o $@ $<
我编写了一个使用bash实现所需功能的脚本,但我想使用make来做同样的事情。
更新
在我的用例中,涉及的目录是。的子目录 当前目录:
源目录./docs/包含多个(嵌套)子目录 包含以.md
目标目录./install/HTML/最初不存在,但它 应该按照制作过程的要求构建。
例如,如果修改或添加了文件./docs/info/general/foo.md,则make进程应在创建目录后创建文件./install/HTML/info/general/foo.html ./安装/ HTML / info / general /如果它还不存在。
解
在@MadScientist的帖子之后,我能够构建以下解决方案:
SOURCE_DIR := docs
TARGET_DIR := install/HTML
# ----- Get all source file (.md) paths
markdown := $(shell find $(SOURCE_DIR) -name '*.md')
# ----- Strip the source directory and .md suffix
files := $(patsubst $(SOURCE_DIR)/%.md, %, $(markdown))
# ----- Create paths to the target .html files
html := $(patsubst %, $(TARGET_DIR)/%.html, $(files))
all: $(html)
$(TARGET_DIR)/%.html: $(SOURCE_DIR)/%.md
@echo Converting $< into $@
dir=`dirname $@`; \
mkdir --parents $$dir; \
pandoc -o $@ $<
答案 0 :(得分:0)
你没有提供太多细节,所以我可以建议的是:
DESTDIR := newdir
markdown := $(shell find . -name '*.md')
all: $(patsubst %.md, %.pdf, $(markdown))
%.pdf: $(DESTDIR)/%.md
pandoc -o $@ $<