16

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

目前:

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

改进的潜在希望/收益是

  • 共享编译器缓存以减少构建时间并需要磁盘空间
  • 更容易维护

SCons 能否很好地完成这项任务?我已经看到关于它的评论没有像 Waf 那样缩放。然而,这些都是几年前的。scons 在过去几年的表现有进步吗?如果不是,那么与 Waf 相比,其性能不佳的原因是什么。

4

3 回答 3

10

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

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

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

不幸的是,我对 Scons 没有深入的经验,但对 GNU Make/Autotools 有很多经验。在评估构建工具之后,我们决定采用的决定waf是,我们需要在任何地方都能正常工作的东西,这使得我们的构建工具得到了 python 的支持并且速度很快。我的决定是基于这些结果并从那里开始的。

于 2013-02-07T15:48:56.997 回答
8

过去,SCons 的性能不高,但从那时起已经添加了许多改进。

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

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

于 2012-09-24T17:15:55.737 回答
7

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

华夫

优点:

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

缺点:

  • 扩展的痛苦
  • 文档严重不足(尽管示例有所帮助)
  • 不能很好地区分 GCC 和 Clang(不确定 SCons 是否也有这个问题)

缺点

优点:

  • 比 Waf 简单得多
  • 比 Waf 更容易扩展(见这里
  • 记录得更好一些

缺点:

底线

这取决于你在寻找什么。总的来说,Waf 似乎非常擅长管理大型项目(不仅仅是因为速度),但是,如果您需要扩展它,请寻找其他地方。另一方面,SCons 更容易使用。

如果您决定使用 Waf,只需将您的问题发布到邮件列表即可。

于 2014-07-20T20:26:43.490 回答