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