`ghc-pkg`和`cabal`程序在Haskell中有什么关系?

16

据我所知,cabal是一种像FreeBSD的pkg_add一样管理软件包安装的程序。

但是还有一个名为ghc-pkg的工具。我不知道为什么会有两个不同的程序。它们各自扮演什么角色,又有什么关联呢?


GHC-Pkg和Cabal之间的关系是什么? - Boris
@Boris 很难理解为什么我无法通过标题找到它... - eonil
是的,这很奇怪。它们非常相似。 - Boris
2个回答

12

Cabal是Haskell的一个构建和打包库,类似于“Haskell自动化工具”。它读取 .cabal 文件,Haskell软件包通常有一个名为 Setup.hs 的文件,该文件使用Cabal来构建软件包。同时,cabal-install 软件包提供了 cabal 命令。它提供运行 Setup.hs 脚本以及一些包管理功能,例如直接从 Hackage 安装包。您应该阅读 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进行操作。


1
ghc-pkg无法卸载。您可能是想注销(unregister)。即使注销了,我仍然可以正常使用已注销的软件包。因此,这不是一个卸载操作。 - Alexandre Martins

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