Build 支持文件名空间的简单构建系统?
我很难为我的Madoko降价笔记找到构建系统。这些注释只是一个文件目录,通过Build 支持文件名空间的简单构建系统?,build,build-system,Build,Build System,我很难为我的Madoko降价笔记找到构建系统。这些注释只是一个文件目录,通过madoko mynote.mdk处理这些文件,生成out/mynote.html。GNU Make在这方面做得很好,直到我创建了一个文件名中带有空格的便笺。很明显,GNU Make无法处理这个问题。这是令人失望的,因为我不知道像GNU这样的任何其他系统 我可以尝试其他哪些构建系统来处理此任务?随着时间的推移,不同的编程语言或生态系统通常会产生自己的构建工具。因此,它们通常更多地与预期将在其中使用的各自上下文相耦合。尽管
madoko mynote.mdk
处理这些文件,生成out/mynote.html
。GNU Make在这方面做得很好,直到我创建了一个文件名中带有空格的便笺。很明显,GNU Make无法处理这个问题。这是令人失望的,因为我不知道像GNU这样的任何其他系统
我可以尝试其他哪些构建系统来处理此任务?随着时间的推移,不同的编程语言或生态系统通常会产生自己的构建工具。因此,它们通常更多地与预期将在其中使用的各自上下文相耦合。尽管
make
已经是一个较旧的构建工具,但它仍然被广泛使用,因为它不会对您试图构建的内容做出太多假设。然而,它也有它的局限性,正如你自己发现的那样
就我个人而言,我已经克制自己不再在文件名中使用空格,仍然使用Madoko和make
。然而,如果这对您不方便,您的选项是一种工具,本质上会带来更多的上下文假设。例如,使用Java世界的Gradle工具通常很容易完成您的需求,但是您必须使用Groovy语法来表达它,并且每次运行任务都会启动JVM。另一个例子是Rake,它要求您引入一个Ruby生态系统。不过,我建议您尝试一下,因为它相当简单,但仍然强大,而且肯定比JVM方法更轻量级。另一种更异质的方法可能是Cmake,但由于缺乏任何经验,我不能说任何关于起起落落的事情
[“$source”-nt“$target”]
shell测试的简单shell脚本,如下所示。我想添加一个-watch
选项,使用inotifywait
在修改每个文件时编译它。不带参数运行以下脚本将编译工作目录中的所有“stale”.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
很高兴听到有人也使用了Madoko。谢谢你的建议,有这么多领域特定的构建工具,我需要一些。同时,我创建了一个shell脚本,该脚本基于[“$source”-nt“$target”]测试执行我现在需要的操作,该测试检查源文件是否比输出文件更新。我很快会把代码作为替代方案发布。我很难接受文件名中应该排除空格。