如何更改cabal存储文档的目录

时间:2011-04-29 13:09:43

标签: haskell configuration-files cabal

我安装了一个带有前缀$HOME/usr的自定义Haskell工具链,因此编译器位于$HOME/usr/bin/ghc$HOME/usr/share/doc/ghc/...中的文档中。工具链包含ghc安装,cabal安装以及您需要的所有库。我以某种方式设置$PATH,所有这些程序都在其中。我的系统上没有其他这些工具的安装。

现在我尝试安装其他一些库。但当cabal尝试安装文档时,我总是遇到同样的错误:

~$ cabal install --global binary
Resolving dependencies...
Configuring binary-0.5.0.2...
Preprocessing library binary-0.5.0.2...
Building binary-0.5.0.2...
 ... snip ...
Registering binary-0.5.0.2...
cabal: /usr/local/share/doc: permission denied

如何告诉cabal文档应该存在的位置?我不想在shell中一次又一次地提供这些信息,所以最好的是配置文件。我希望在我的主页树中包含所有与haskell相关的东西,以避免用错误的命令破坏我的系统。

3 个答案:

答案 0 :(得分:9)

为什么要安装“--global”?默认情况下,这会将所有内容放在/ usr / local /中。如果您按标准进行每用户安装,则文档将安装到您的主目录中,它应该可以正常工作。

话虽这么说,这可以通过文件进行配置。 cabal配置文件通常位于~/.cabal/config/。这是我的相关部分:

install-dirs global
  -- prefix: /usr/local
  -- bindir: $prefix/bin
  -- libdir: $prefix/lib
  -- libsubdir: $pkgid/$compiler
  -- libexecdir: $prefix/libexec
  -- datadir: $prefix/share
  -- datasubdir: $pkgid
  -- docdir: $datadir/doc/$pkgid
  -- htmldir: $docdir/html
  -- haddockdir: $htmldir

您可以进行任何您喜欢的更改,只需确保取消注释。还有一个“install-dirs用户”部分,用于每个用户的安装。

答案 1 :(得分:2)

我同意这张海报。为什么没有明确的文件说明 cabal安装包--global 在需要许可时提示sudo? 干 sudo cabal安装包 是一个坏主意,因为那时你正在以root身份构建包。你必须允许互联网连接写入root拥有的文件(你必须填写/root/.cabal或类似的东西)。

以下是人们想要这样做的一个很好的理由: 如果我通过我的linux包管理器安装ghc和haskell平台(这有很好的理由;),那么如果我做cabal安装包 它不会识别全球认可的包裹。

答案 2 :(得分:1)

好吧,有人实际上发布了一个(几乎令人讨厌的)详细描述如何进行全局安装(使用--global或install-dirs global)而不会遇到权限错误。诀窍是在cabal配置文件中使用root-cmd sudo。 看到, http://jdgallag.wordpress.com/2011/05/14/cabal-install-to-global-using-sudo-but-do-not-build-as-root/