`ghc-pkg` 和 `cabal` 程序有啥关系? (哈斯克尔)

Posted

技术标签:

【中文标题】`ghc-pkg` 和 `cabal` 程序有啥关系? (哈斯克尔)【英文标题】:How are `ghc-pkg` and `cabal` programs related? (Haskell)`ghc-pkg` 和 `cabal` 程序有什么关系? (哈斯克尔) 【发布时间】:2011-07-05 13:31:41 【问题描述】:

据我所知,cabal 是一个用于管理软件包安装的程序,例如 FreeBSD 的 pkg_add。 但是还有另一个工具叫做ghc-pkg。我不知道为什么有两个不同的程序。它们各自的作用是什么?它们之间有什么关系?

【问题讨论】:

与***.com/questions/2706667/…重复 @Boris 很难理解为什么我的标题找不到它... 是的,这很奇怪。它们非常相似。 【参考方案1】:

Cabal 是 Haskell 的构建和打包库,是一种“Haskell 自动工具”。它读取.cabal 文件并且Haskell 包通常有一个文件Setup.hs 使用Cabal 来构建包。然后还有 cabal-install 软件包提供的 cabal 命令。它提供了运行Setup.hs 脚本的命令和一些包管理功能,比如直接从 Hackage 安装包。你应该阅读this blogpost by Ivan Miljenovic,它很好地解释了 Cabal、cabal-install 和 Hackage 的作用。

ghc-pkg 是一个底层工具,用于戳 GHC 的包数据库。 Cabal 旨在与每个 Haskell 编译器一起使用,而 ghc-pkg 显然是特定于 GHC 的。你不能使用 ghc-pkg 来构建任何东西,你可以注册你已经构建的包。

【讨论】:

【参考方案2】:

cabal 只是 ghc-pkg 的一个接口层,具有一些附加功能。知道 ghc-pkg 很重要,因为 cabal 没有添加卸载功能,但可以直接使用 ghc-pkg 完成。

【讨论】:

ghc-pkg 无法卸载。你的意思可能是注销。即使注销后,我仍然可以正常使用未注册的包。因此,它不是卸载。

以上是关于`ghc-pkg` 和 `cabal` 程序有啥关系? (哈斯克尔)的主要内容,如果未能解决你的问题,请参考以下文章

在 Cabal 测试套件中找到我的可执行文件

通过 cabal (cabal-install) 在命令行中指定 ghc 选项,而无需编辑软件包的 .cabal 文件

通过 cabal 中的可执行文件分析库

在 Windows 上使用 cabal 安装 pango 和 GIO 时不可见 CULlong 类型的构造函数

如何在GHC-8.2.2和Cabal-2.0.0.1中使用Text.Parsec

cabal 安装 mime 失败