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

时间:2018-05-18 02:20:31

标签: build build-system

我无法为我的Madoko Markdown Notes找到构建系统。这些注释只是一个文件目录,可以使用madoko mynote.mdk处理以生成out/mynote.html。为此,GNU Make工作得非常好,直到我创建了一个带有文件名空间的注释。很明显,GNU Make无法解决这个问题。这是令人失望的,因为我不知道任何其他系统,如GNU Make。

我可以尝试哪些其他构建系统来处理此任务?

2 个答案:

答案 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