如何编写Makefile实现嵌套MD目录增量转HTML并镜像结构
非递归Makefile实现MD到HTML的增量转换与目录镜像
核心思路
通过find收集所有嵌套子目录中的Markdown文件,利用Make的模式规则映射路径并生成镜像目录结构,仅对修改过的MD文件执行转换。
完整Makefile代码
# 定义源文件目录和输出目录 MD_DIR := md HTML_DIR := html # 递归收集所有MD文件(包含子目录) MD_FILES := $(shell find $(MD_DIR) -type f -name '*.md') # 生成对应的HTML目标文件路径:替换目录前缀和文件后缀 HTML_FILES := $(patsubst $(MD_DIR)/%.md,$(HTML_DIR)/%.html,$(MD_FILES)) # 默认目标:生成所有需要的HTML文件 all: $(HTML_FILES) # 单个HTML文件的生成规则 # 自动创建目标文件所在的嵌套目录,调用转换脚本完成MD到HTML的转换 $(HTML_DIR)/%.html: $(MD_DIR)/%.md @mkdir -p $(@D) python3 md2html $< $@ # 可选:清理所有生成的HTML文件及目录 clean: rm -rf $(HTML_DIR)
关键部分说明
- 文件收集:
find $(MD_DIR) -type f -name '*.md'会遍历md目录下所有层级的.md文件,无需手动维护子目录列表。 - 路径映射:
patsubst函数将每个MD文件的路径替换为对应的HTML路径,比如md/mydir/one.md会转为html/mydir/one.html。 - 目录自动创建:
mkdir -p $(@D)中的$(@D)代表目标文件的父目录,确保嵌套子目录不存在时自动创建,避免转换失败。 - 增量更新:Make会自动对比MD文件和对应HTML文件的修改时间,仅当MD文件更新或HTML文件不存在时,才执行
md2html脚本。
使用方法
- 将上述代码保存为
Makefile(注意文件名首字母大写),放在项目根目录。 - 执行
make即可生成所有需要的HTML文件,仅处理修改过的MD文件。 - 执行
make clean可删除整个html目录,清理生成的文件。
内容的提问来源于stack exchange,提问作者You'reNotARobot
相关产品推荐
相关产品推荐

