【问题标题】:tool for building software构建软件的工具
【发布时间】:2012-10-26 17:54:00
【问题描述】:

我需要诸如 make 之类的东西,即依赖项 + 执行 shell 命令,其中失败的命令会停止 make 执行。 但更深入地与 shell 集成,即现在使每一行都在单独的上下文中执行,因此在一行中设置变量并在下一行中使用它并不容易(我不想在行尾转义字符,因为它不可读)。 我想要具有控制流和功能的简单语法(没有 XML)(make 中缺少什么)。 它不必支持编译。我必须将使用自动工具构建的几个组件绑定在一起,打包它们,触发测试并发布结果。

我查看了:make、ant、maven、scons、waf、nant、rake、cons、cmake、jam,但它们不符合我的需求。

【问题讨论】:

  • 听起来 shell 脚本是你唯一的选择

标签: build-process build-automation


【解决方案1】:

看看doit

  • 您可以使用 shell 命令或 python 函数来定义任务(构建)。
  • 非常易于使用。用python编写脚本。 “无 api”(您不需要在脚本中导入任何内容)
  • 它对跟踪依赖项和目标有很好的支持

【讨论】:

    【解决方案2】:

    看看fabricate

    如果这不能满足您的需求,或者您不想用 Python 编写构建脚本,您也可以结合使用 shell 脚本和 fabricate。像手动构建项目一样编写脚本,但在构建调用之前添加“fabricate.py”,以便自动管理构建依赖项。

    简单示例:

    #!/bin/bash
    EXE="myapp"
    CC="fabricate.py gcc" # let fabricate handle dependencies
    FILES="file1.c file2.c file3.c"
    OBJS=""
    
    # build link
    for F in $FILES; do
        echo $CC -c $F
        if [ $? -ne 0 ]; then
            echo "Build failed while compiling $F" >2
            exit $?
        fi
        OBJS="$OBJS ${F/.c/.o}"
    done
    
    # link
    $CC -o $EXE $OBJS
    

    【讨论】:

      【解决方案3】:

      鉴于您希望控制流、函数以及在同一环境中运行的所有内容且没有 XML,听起来您想使用可用的 shell 脚本语言 (sh/bash/ksh/zsh) 或 Perl(插入您自己的最喜欢的脚本语言在这里!)。

      我注意到你没有看过a-a-p。我对此并不熟悉,除了它是给我们带来 vim 的人的 make 系统。所以你可能想看看那个。

      【讨论】:

        【解决方案4】:

        混合使用 makefile 和脚本语言来选择一次运行哪个 makefile 可以做到这一点。

        【讨论】:

          【解决方案5】:

          我也有同样的需求。我目前的解决方案是使用 makefile 来准确表示图形依赖关系(您必须阅读"Recursive make considered harmful")。这些 makefile 触发将 makefile 变量作为参数的 bash 脚本。这样您就不必处理 shell 上下文的问题,并且可以清楚地分离依赖项和操作。

          我目前正在考虑使用 waf,因为它看起来设计精良且速度足够快。

          【讨论】:

            【解决方案6】:

            你可能想看看SCons;它是用 Python 编写的 Make-replacement。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-11-11
              • 2011-08-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多