支持文件名含空格的简易构建系统推荐?
哈哈,我之前也踩过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
相关产品推荐
相关产品推荐

