在大型项目中选择Scons和Waf

时间:2012-09-24 16:50:43

标签: python caching scons waf build-tools

我们正在考虑将一个非常大的项目从使用GNU Make转换为更现代的构建工具。我目前的建议是使用SCons或Waf。

目前:

  • 建造时间约为15分钟。
  • 约100名开发人员。
  • 大约10%的代码是C / C ++ / Fortran休息是Ada(使用gnatmake)。

改善的潜在希望/收益

  • 共享编译器缓存以缩短构建时间并需要磁盘空间
  • 易于维护

SCons能否很好地完成这项任务?我已经看到它的评论没有缩放,也不像Waf。然而,这些已经有几年了。过去几年中,scons的表现有所增加吗?如果没有,与Waf相比,其表现不佳的原因是什么。

3 个答案:

答案 0 :(得分:10)

我一直在为我们公司开发一个围绕waf构建的工具链。它面向Fedora,Ubuntu,Arch,Windows,Mac OSX,并将推广到我们的嵌入式设备,在各种主机上进行交叉编译。

我们已经找到了waf允许通过工具,功能和其他方法包含可扩展性的方式,这使得我们的项目的定制和扩展非常容易。

就个人而言,我认为它很精彩,并且很好地将接口抽象为集成的不同工具。

不幸的是,我对Scons没有深入的经验,但是很多用GNU Make / Autotools。我们决定在评估构建工具之后使用waf,我们需要能够在各处运行良好的东西,这使得我们的构建工具得到了python的支持并且速度很快。我的决定基于these results并从那里开始。

答案 1 :(得分:8)

过去,SCons并没有表现出色,但从那时起又增加了很多改进。

我喜欢这两种选择,并且必须在6个月前做出同样的决定。我选择了SCons,因为它似乎拥有更大的用户和支持基础。

Here是一个有用的链接,可以将SCons与其他构建工具进行比较。

答案 2 :(得分:7)

我个人更喜欢Waf,因为它更灵活,并且没有变种目录问题。

WAF

优点:

  • 单独的变体目录;你不要把你的源文件夹与目标文件混在一起(SCons也有这个,但默认情况下它没有打开,需要几次尝试才能正常工作)
  • 非常灵活
  • 自动依赖关系排序
  • 适用于许多Python版本(CPython 2,CPython 3,Jython和PyPy)
  • 您将它与您的应用程序一起分发,因此用户只需要Python

缺点:

  • 痛苦 以扩展
  • 可怕的未记录(尽管示例有帮助)
  • 没有很好地区分GCC和Clang(不确定SCons是否也有这个问题)

SCons的

优点:

  • 比Waf简单得多
  • 比Waf更容易扩展(参见here
  • 记录得更好

缺点:

底线

这取决于你正在寻找什么。总的来说,Waf似乎非常善于管理大型项目(而不仅仅是因为速度),但是,如果你需要扩展它,那就去别处看看。另一方面,SCons更容易使用。

如果您决定选择Waf,只需将问题发布到mailing list