我想使用使处理任意目录树(源)的内容并创建与源树具有相同结构的另一个目录树(目标) 。使用make处理从一个任意目录树到另一个目录树的文件
源代码树的子目录包含以.md结尾的文件(降价文本)。目标是使用pandoc为源树中的每个文件在目标树中创建一个.html文件。
以下代码从this thread转换文件在同一棵树,但我不知道如何修改它,因此它将生成的文件放入另一棵树。
markdown := $(shell find . -name '*.md')
all: $(patsubst %.md, %.pdf, $(markdown))
%.pdf: %.md
pandoc -o [email protected] $<
我写了一个脚本,使用bash实现所需的功能,但我想用make来做同样的功能。
UPDATE
在我的使用情况下,所涉及的目录是 当前目录的子目录:
源目录,./docs/,包含几个(嵌套)子目录 包含在.MD
目标目录,./install/HTML/结尾的文件,不存在原,但它 应根据make过程的需要构建。
例如,如果该文件是./docs/info/general/foo.md修改或添加,make过程应之后创建文件./install/HTML/info/general/foo.html创建目录./install/HTML/info/general/如果它不存在。
SOLUTION
后@ 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 [email protected]
dir=`dirname [email protected]`; \
mkdir --parents $$dir; \
pandoc -o [email protected] $<