我无法为我的Madoko Markdown Notes找到构建系统。这些注释只是一个文件目录,可以使用madoko mynote.mdk
处理以生成out/mynote.html
。为此,GNU Make工作得非常好,直到我创建了一个带有文件名空间的注释。很明显,GNU Make无法解决这个问题。这是令人失望的,因为我不知道任何其他系统,如GNU Make。
我可以尝试哪些其他构建系统来处理此任务?
答案 0 :(得分:0)
随着时间的推移,不同的编程语言或生态系统通常会生成自己的构建工具。因此,它们通常更多地耦合到它们预期使用的相应上下文中。虽然make
已经是一个较旧的构建工具,但它仍然被广泛使用,因为它不会对您尝试的内容做出太多假设。建立。然而,正如你自己发现的那样它有其局限性。
就个人而言,我已经克制自己不再使用文件名中的空格了,仍然使用Madoko和make
。但是,如果这对您来说不方便,那么您的选项就是本质上会带来更多上下文假设的工具。例如,使用Java世界的Gradle工具通常很容易实现您的需求,但您必须使用Groovy语法表达它,并且每次运行任务都将启动JVM。另一个例子是Rake,它要求您引入Ruby生态系统。但是,我建议你尝试一下,因为它相当容易,但仍然很强大,并且肯定比JVM方法更轻量级。另一种更为异质的方法可能是Cmake,但缺乏经验,我不能说任何有关跌宕起伏的事情。
答案 1 :(得分:0)
到目前为止,一个相当简单的解决方案是基于["$source" -nt "$target"]
shell测试的简单shell脚本,如下所示。我有兴趣使用-watch
添加inotifywait
选项来编译修改后的每个文件。运行不带参数的以下脚本会编译工作目录中的所有“陈旧”.mdk
文件。
#!/usr/bin/env bash
TOBUILD=()
while [[ $# -gt 0 ]]; do
case $1 in
clean|-clean|-c) # Clean output directory
CLEAN=true
shift
;;
-f|--force) # Force rebuild all files
FORCE=true
shift
;;
*) # Force rebuild these files
TOBUILD+=("$1")
shift
;;
esac
done
if [ "$CLEAN" = true ]; then
rm -rf out
exit
fi
if [ ${#TOBUILD[@]} -gt 0 ]; then
FORCE=true
else
for source in *.mdk; do
TOBUILD+=("$source")
done
fi