【问题标题】: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,但它们不符合我的需求。
【问题讨论】:
标签:
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。