Build 支持文件名空间的简单构建系统?

Build 支持文件名空间的简单构建系统?,build,build-system,Build,Build System,我很难为我的Madoko降价笔记找到构建系统。这些注释只是一个文件目录,通过madoko mynote.mdk处理这些文件,生成out/mynote.html。GNU Make在这方面做得很好,直到我创建了一个文件名中带有空格的便笺。很明显,GNU Make无法处理这个问题。这是令人失望的,因为我不知道像GNU这样的任何其他系统 我可以尝试其他哪些构建系统来处理此任务?随着时间的推移,不同的编程语言或生态系统通常会产生自己的构建工具。因此,它们通常更多地与预期将在其中使用的各自上下文相耦合。尽管

我很难为我的Madoko降价笔记找到构建系统。这些注释只是一个文件目录,通过
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”]测试执行我现在需要的操作,该测试检查源文件是否比输出文件更新。我很快会把代码作为替代方案发布。我很难接受文件名中应该排除空格。