【发布时间】:2012-07-21 04:10:29
【问题描述】:
我正在我的 Mac 上用 Haskell 编写一个程序(命令行可执行文件,而不是应用程序)。我正在使用 GitHub 来托管 git 存储库和主页。我制作了 <project>.cabal 和 Setup.hs 文件,因为 Cabal 可以轻松构建、测试和生成文档。我也可能会上传到 Hackage,我不知道。
当我标记版本 1.0 时,我想制作一个 Homebrew 公式来从 GitHub 下载 tarball 并构建它。 我希望唯一的依赖是 GHC。
我将使用 runhaskell Setup configure/build/install(前缀为 /usr/local/Cellar/...)而不是 cabal 命令来避免依赖 cabal-install。
这一切都很好,直到我开始使用来自 Hackage 的包,例如火焰制造者和艾森。我应该如何处理?
我不想强迫非 Haskell 用户下载整个 Haskell 平台。理想情况下,人们应该能够让 Homebrew 在构建我的程序之前安装 GHC,然后如果他们愿意,在之后删除 GHC。如果我将 Haskell 平台作为依赖项并首先通过 cabal-install 或类似方式安装我的 Haskell 依赖项,
- 包含包的
~/.cabal/文件夹将被留下,即使之后它们brew uninstall haskell-platform - 我还不如只经历 Hackage 并让人们
cabal install它,即,将大部分范围限制为 Haskellers。
我认为 Cabal(-install) + Hackage 对开发和 Haskellers 来说是一个有用的工具,但不适合这个。
我是否应该只下载我正在使用的软件包的源代码并将其包含在我的源代码树中,并将其添加到构建命令中?或者我应该使用--package-db 选项(找到here)?或者我的公式是否可以即时下载软件包的 tarball 并构建它?
我看了一下 cabal2arch (Arch wiki, GitHub repo),但我不确定它如何处理依赖关系,或者它是否只是在做我不想做的事情。
【问题讨论】:
-
分发二进制文件不是更容易,这样非 Haskeleer 就不需要构建它。 Haskell wikiHaskellers 上提到了一个打包器,可以使用 cabal 从源代码构建。
-
您提到的链接是针对应用程序包的——我的程序是一个命令行工具。是的,这会更容易,但我真的很喜欢 homebrew 作为包管理器,它喜欢从源代码构建所有内容(请参阅github.com/mxcl/homebrew/wiki/FAQ 中的“你为什么要编译所有内容?”部分)。您可以将“瓶子”与自制软件一起使用,但这确实适用于需要数小时才能构建的东西(例如 Qt),而且您不能在任何地方托管二进制文件。
-
但是大多数用户没有自制软件,而且用户下载编译程序的简单二进制文件肯定比包管理器更容易。如果您必须使用管理器,请尝试使用 macports 并将您的代码设置为端口,然后 macports 将集中构建它,用户下载预构建的二进制文件。
-
我不太喜欢 macports,如果我分发二进制文件,我不知道我会在哪里托管它。我只是想为使用自制软件的人提供一个方便的单线,而我这样做的唯一障碍是弄清楚如何处理 hackage 依赖项。这与其说是一个实际的分发问题,不如说是,我该如何做这个具体的事情?
-
有没有办法为blaze-builder、aeson等制作自制公式并将它们添加为依赖项?
标签: macos haskell homebrew cabal haskell-platform