You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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脚本。

使用方法

  1. 将上述代码保存为Makefile(注意文件名首字母大写),放在项目根目录。
  2. 执行make即可生成所有需要的HTML文件,仅处理修改过的MD文件。
  3. 执行make clean可删除整个html目录,清理生成的文件。

内容的提问来源于stack exchange,提问作者You'reNotARobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:35:11