7

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

更新:该项目对构建有一些复杂的要求:

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

2 回答 2

4

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

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

  • Shake 特别擅长处理具有无法静态预测的依赖关系的生成文件,特别是当您从编译的程序生成文件时。
  • 构建项目的 Haskell 部分可能比构建 Python 更难(因为 Haskell 具有更丰富的结构和更复杂的编译器)。使用 Shake 可以更轻松地利用现有的 Haskell 编译示例,并在需要时使用库来解析 Haskell
于 2014-03-04T14:59:54.313 回答
3

有一个SCons wiki 页面将其与其他构建工具进行比较,不幸的是没有与 Haskell/Shake 的比较。

此外,这个问题可能会有所帮助。

与其他工具(尤其是 make 和 cmake)相比,SCons 的 Python 语法及其非常准确且易于使用的隐式依赖系统确实令人眼前一亮。

于 2014-03-04T14:53:19.947 回答