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

支持文件名含空格的简易构建系统推荐?

哈哈,我之前也踩过Make处理空格文件名的坑!给你推荐几个对空格友好的构建工具,都能完美搞定你的Madoko笔记构建需求:


1. Python doit

这是个基于Python的构建工具,Python对字符串里的空格天然支持,完全不会出问题。你只需要写一个dodo.py文件,示例配置大概是这样:

import glob
from doit.tools import create_folder

def task_build():
    # 找到所有.mdk文件
    mdk_files = glob.glob("*.mdk")
    for mdk_file in mdk_files:
        html_file = f"out/{mdk_file.replace('.mdk', '.html')}"
        yield {
            'name': html_file,
            'actions': [
                create_folder('out'),
                f'madoko "{mdk_file}" --output "{html_file}"'
            ],
            'file_dep': [mdk_file],
            'targets': [html_file],
        }

运行的时候直接敲doit就行,它会自动检测文件变化,只重新构建修改过的笔记。

2. Just

这是个轻量现代的命令行构建工具,语法比Make简单太多,对空格的支持也很到位。写一个Justfile:

build:
    mkdir -p out
    for file in *.mdk; do
        madoko "$file" --output out/"${file%.mdk}.html"
    done

执行just build就搞定了,双引号包裹文件名的写法能完美处理空格。

3. Taskfile(Go编写)

如果喜欢YAML格式的配置,Taskfile是个不错的选择,同样对空格友好。创建Taskfile.yml:

version: '3'
tasks:
  build:
    desc: Build all Madoko notes to HTML
    cmds:
      - mkdir -p out
      - |
        for file in *.mdk; do
          madoko "$file" --output out/"${file%.mdk}.html"
        done

运行task build就可以构建所有笔记了。


额外小提示:其实Make也能救

如果你不想换工具,只要调整Makefile的写法,用双引号包裹所有涉及文件名的变量就行,比如:

MDK_FILES := $(wildcard *.mdk)
HTML_FILES := $(patsubst %.mdk,out/%.html,$(MDK_FILES))

.PHONY: all
all: $(HTML_FILES)

out/%.html: %.mdk
	@mkdir -p out
	madoko "$<" --output "$@"

这样Make也能正确处理带空格的文件名,之前的问题应该是没加双引号导致的。

内容的提问来源于stack exchange,提问作者Matthew Palermo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:27