【问题标题】:Differences between SCons and ShakeSCons 和 Shake 的区别
【发布时间】:2014-04-06 01:35:51
【问题描述】:

我正在开发一个 Python/Haskell 项目,我正在寻找 Makefile 的替代品。显而易见的选择是 Python SCons 和 Haskell Shake。由于我没有使用过它们中的任何一个,所以我想问一下它们的优缺点是否有任何比较。

更新:该项目的建设要求有些复杂:

  • 让用户配置构建 - 例如启用/禁用选项、工具路径等。
  • 在编译时会生成 Haskell 和 Python 文件。它们的依赖项应该可以正常工作。
  • 有多个 Haskell 程序共享大部分源文件。我想这样:
    • 可以单独构建每一个,而不是构建不需要的源;
    • 编译多个程序时不会多次构建源文件;
    • 尽可能在编译期间实现并行性。
  • 检查目标系统上的多个已安装程序及其路径(如pythonflock 等)
  • 检查目标系统的依赖关系,包括 Python、Haskell。
  • 根据依赖项对构建进行参数化 - 如果缺少用于测试的依赖项,仍然可以构建项目,跳过测试(并通知用户)。

【问题讨论】:

  • 请注意,仅仅因为您的项目是在 Python/Haskell 中,并不限制您使用 SCons/Shake - 两个构建系统都适用于多种语言的项目。当然,混合使用较少的语言通常是有益的。
  • @NeilMitchell 确实如此,但我想避免对用户施加额外的要求,这就是为什么我试图将构建系统限制为项目已经使用的语言。

标签: haskell build scons shake-build-system


【解决方案1】:

有一个 Why Shake? 文档给出了选择 Shake 而不是其他构建系统的理由,但它并没有关注与 SCons 的比较。

更新:您的所有需求似乎都很容易在 Shake 中表达(如果您遇到任何问题,请咨询 StackOverflow)。至于 Shake vs SCons:

  • Shake 特别擅长处理具有无法静态预测的依赖关系的生成文件,尤其是当您从编译的程序生成文件时。
  • 构建项目的 Haskell 部分可能比构建 Python 更难(因为 Haskell 具有更丰富的结构和更复杂的编译器)。使用 Shake 可以更轻松地利用 existing examples of compiling Haskell 并在需要时使用 libraries for parsing Haskell

【讨论】:

    【解决方案2】:

    有一个SCons wiki page 将其与其他构建工具进行比较,遗憾的是没有与 Haskell/Shake 的比较。

    另外,这个question 可能会有所帮助。

    与其他工具(尤其是 make 和 cmake)相比,

    SCons 的 Python 语法和非常准确且易于使用的 implicit 依赖系统确实令人眼前一亮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      相关资源
      最近更新 更多