用于构建软件的工具

时间:2009-08-25 09:02:44

标签: build-process build-automation

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

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

6 个答案:

答案 0 :(得分:3)

看看doit

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

答案 1 :(得分: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

答案 2 :(得分:1)

鉴于您需要控制流,函数,在同一环境中运行的所有内容而不是XML,听起来您想要使用可用的shell脚本语言(sh / bash / ksh / zsh)或Perl(插入您自己的语言)最喜欢的脚本语言!)。

我注意到你没有看过a-a-p。我不熟悉这个,除了它是一个由我们带给我们的人制作系统。所以你可能想看一下。

答案 3 :(得分:0)

makefile和脚本语言的混合,可以选择一次运行哪个makefile。

答案 4 :(得分:0)

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

我正在考虑使用waf,因为它看起来设计得很好而且足够快。

答案 5 :(得分:0)

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