小型Haskell项目的跨平台Makefile?

7
我最近编写了一个小的Haskell实用程序,只有一个文件,将其包含在我的纯PHP项目(我知道这可能让人感到惊讶)的“工具”部分中。
最初,我将.hs源文件和在Linux开发机器上生成的二进制文件都提交到我们使用的版本控制系统(Git)中。但现在,我想创建跨平台的makefile,以便其他开发人员可以轻松地在他们的系统上编译它。
是否有一些最佳实践/指南,甚至更好的是可供下载的Makefile模板?没有什么花哨的东西,只需允许开发人员指定有关他们的GHC设置的一些细节并运行简单的脚本即可。
2个回答

11

推荐分发Haskell项目的方式是使用Cabal。Cabal既是Haskell代码的构建系统,也是包管理器,可轻松在不同平台上构建Haskell代码,同时为你处理依赖关系。

下面是一个示例Cabal文件:

Name:           MyPackage
Version:        0.0
Cabal-Version:  >= 1.2
License:        BSD3
Author:         Angela Author
Synopsis:       Small package an utility program
Build-Type:     Simple

Executable myutility
  Build-Depends:  base
  Main-Is:        Main.hs
  Hs-Source-Dirs: src

你可以通过运行以下命令交互式地生成一个Cabal文件:

$ cabal init
Cabal会询问你一些简单的问题,并基于你的回答生成一个cabal文件。然后,你可以调整这个文件以适应你的特定需求。
要安装你的包,只需在包目录中运行以下命令。
$ cabal install

你也可以将你的包上传到Hackage,这是标准的Haskell包存储库。这样,人们可以通过以下命令一次性下载和安装你的包(及其依赖项):

$ cabal install mypackage

此外,还存在将Cabal软件包转换为其他包管理器的工具,如果您不想要求用户安装Cabal(尽管Cabal包含在Haskell平台中)。

它还可以与Haddock一起很好地使用,为您的软件包生成参考文档。请查看Hackage上的一些软件包,以了解结果的示例。

目前还正在进行工作,以改进Cabal对测试套件的支持。

总的来说,这些原因和更多原因使得使用Cabal来组织、构建和分发您的Haskell项目非常有益。


谢谢!Cabal是解决这个问题的完美方案,并且在Linux和Windows上开箱即用。您提供的cabal模板帮了我很多忙,我只需要将HUnit更改为base即可。 - Anupam Jain
1
请注意,您还可以使用 cabal init 创建一个空项目。最后,cabalHaskell 平台 的一部分,因此如果您使用核心发行版,则它将在所有计算机上都可用。 - Don Stewart

2
如果你能承担更多的依赖,可以尝试使用cabal。它是专门为Haskell设计的构建系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接