13

我正在计划一个用 Haskell 编写的项目,也许 C 中也有一些部分。对于构建系统,我决定反对使用 Haskell 程序 cabal 的常见选择,主要是因为我想了解如何用其他语言构建程序。

我听说过 CMake,我认为它是一个非常酷的产品。虽然我不知道如何使用它,但我想在该项目中使用 CMake,只是为了了解它是如何工作的。谷歌搜索没有透露任何关于如何将 cmake 与 haskell 一起使用的事实,而且我阅读的所有教程都相当混乱。是否有可能,如果是的话,怎么可能使用 CMake 编译一个用 Haskell 编写的项目?

4

4 回答 4

17

您当然可以使用 CMake 来构建 Haskell 应用程序和库。为此,您将需要复制 Cabal 所做的大部分工作,这将是有益的,但也很耗时。

我建议使用cabal build -v查看 Cabal 发出的命令,然后将它们转录成 CMake 形式。

或者,使用 CMake 在 Haskell 代码上调用 cabal——这可能不会那么烦人。

于 2011-05-11T20:04:38.307 回答
7

我为 cabal 包编写了简单的 cmake 包装器并将其放在这里:

http://bitbucket.org/arrowd/cmake-findcabal(使用“获取源”按钮下载)。

目前它在 Windows 和 FreeBSD 上为我工作,但我仍计划稍后改进它。我已经在这里回答了这个问题,这样人们就可以在谷歌中找到它,就像我一样。

于 2011-10-25T16:23:16.340 回答
5

虽然您当然可以使用通用构建工具直接构建 Haskell 代码,但与在 Cabal 之上构建相比,结果更难维护,更难与社区共享,更难在其上构建。

对于构建系统,我决定反对使用 Haskell 程序 cabal 的常见选择,主要是因为我想了解如何用其他语言构建程序。

我理解此声明背后的意图,因为您想查看构建过程的所有单独步骤,但换一种方式阅读,通过避免 cabal,您不会看到 Haskell 中的程序是如何构建的,您会看到它是多么痛苦就是重建社区提供的工具。

我建议按照唐的建议去做。查看在cabal -v您的特定编译器(可能是 ghc)下构建的输出并在 CMake 中复制这些步骤。

但是,一旦你理解了这些步骤,我会认真考虑接受这些知识并回到阴谋集团。如果只是让它处理支持多个编译器、平台、包管理等问题。从而减少构建系统的脆弱性,并使打包和共享您的工作更容易。

也就是说,除了 ghc 本身之外,我想不出社区积极使用的单个非 Cabal 构建的包或二进制文件。

但是,我确实希望您在进入构建过程的过程中好运!

于 2011-05-14T22:23:39.673 回答
0

我重写了@arrowdodger 的初始工作,在此过程中修复了一些存在的错误:

  • cmake/由于硬编码路径,无法从项目内目录中使用
  • 出现了一些 Fortran/CXX 变量(导致错误行为)
  • 可以删除许多与 Haskell 无关的代码,根据 CMake 随附的 C/CXX 语言文件的较新版本添加其他代码

可以在以下位置找到存储库:

https://github.com/kvanberendonck/cmake-haskell

对我来说工作得很好,我可以摆脱的构建速度ninja令人印象深刻。

于 2014-03-29T08:44:31.347 回答