繁体   English   中英

使用多个GHC版本的cabal

[英]Using cabal with multiple GHC versions

我的桌面上有ghc6和ghc7。 要安装新软件包(对于特定的ghc版本),我使用带有标志的cabal --with-compiler=<ghc-dir>来指定我想要安装软件包的ghc。

我在安装任何新包之前进行了cabal update 但是如何指定我想要更新哪个ghc? 我的意思是, cabal install没有--with-compiler标志。 我认为就像我使用ghc-pkg7作为ghc7一样,会有cabal7 除了cabal install命令,我知道它正在应用哪个ghc版本,我不知道哪个ghc受其他cabal命令的影响。

此外,当我做ghc-pkg check我发现一些包的问题,​​我不知道如何解决。

我真的很想知道 - 如果有人有 - 在同一台机器上使用多个ghc版本时的良好做法。 例如,如何进行安装,更新等

您可以创建两个配置文件,比如~/.cabal/config~/.cabal/config7 ,并使用un(der)文档选项--config-file在两者之间进行选择。

我认为--with-ghc是合适的选择。 我用我的机器上有多个ghc版本。 它们都有不同的名称,如ghc-6.12.3ghc-7.4.1 它们通常使用这些名称安装,并通过创建从ghcghc-7.4.1符号链接来选择默认编译器。 我认为你不需要不同的ghc版本的不同cabal目录。 Cabal为GHC-6.12.3文件创建了lib/yourpkgghc-6.12.3子目录,依此类推。 cabal update也不会更新已安装的软件包,它只会从您喜欢的软件包服务器中获取当前软件包列表。 对于所有已安装的编译器,这应该是相同的。

cabal update没有--with-compiler选项,因为它完全与编译器无关 - 它根本不涉及GHC或任何其他编译器。 它只是从Hackage下载了一个可用软件包列表,仅此而已。 您可以期望类似的东西适用于其他命令,这些命令不允许您选择编译器(因为开发团队小心避免使用特定的GHC版本,更不用说特定的GHC版本,只要有意义)。

这个答案可以补充其他答案(已经具有启发性)。

首先,要知道GHC的次要版本之间存在显着差异。 例如,从GHC 7.8到GHC 7.10的变化(参见燃烧桥梁提案 )。 因此,最好将GHC二进制文件命名为包括次要版本号,例如: ghc7.8ghc7.10

假设您安装了多个具有以下名称的GHC:

/usr/bin/ghc
/usr/bin/ghc-pkg
/usr/bin/haddock
...
/usr/bin/ghc-7.8
/usr/bin/ghc-pkg-7.8
/usr/bin/haddock-ghc-7.8
...
/usr/bin/ghc-7.6
/usr/bin/ghc-pkg-7.6
/usr/bin/haddock-ghc-7.6
...
(and so on)

对于GHC 7.8,您可以创建一个名为~/.cabal-ghc-7.8/config其中包含以下内容(指向上述位置):

remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo-cache: /home/<USER>/.cabal-ghc-7.8/packages
world-file:        /home/<USER>/.cabal-ghc-7.8/world
compiler: ghc
extra-prog-path:   /home/<USER>/.cabal-ghc-7.8/bin
build-summary:     /home/<USER>/.cabal-ghc-7.8/logs/build.log
remote-build-reporting: anonymous
jobs: $ncpus

install-dirs user
  prefix:          /home/<USER>/.cabal-ghc-7.8

program-locations
  ghc-location:     /usr/bin/ghc-7.8
  ghc-pkg-location: /usr/bin/ghc-pkg-7.8
  haddock-location: /usr/bin/haddock-ghc-7.8
  hpc-location:     /usr/bin/hpc-ghc-7.8
  hsc2hs-location:  /usr/bin/hsc2hs-ghc-7.8

您可以在PATH创建一个名为cabal-ghc-7.8的可执行文件(它使用nm的答案中描述--config-file选项):

#!/bin/bash
exec cabal --config-file=$HOME/.cabal-ghc-7.8/config "$@"

现在,在您的cabalized源目录中,您可以使用GHC 7.8简单地运行cabal-ghc-7.8 build来构建源文件。 (或cabal-ghc-7.8 test或其他任何东西)

您可以为已安装的所有GHC重复此过程。 当然,你不应该担心名为GHC的标准。 默认情况下,Cabal会搜索名为ghc的GHC。

这个答案假设一个UNIX / Linux系统(就像使用bash ),但可以适应其他系统的变化很小。

现在(cabal版本1.24.0.0),可以

$ cabal install <package name> -w path-to-ghc-executable-1 
$ cabal install <package name> -w path-to-ghc-executable-2

为多个不同的GHC分别安装软件包。

(该元可变path-to-ghc-executable-i可以是,如, /usr/bin/ghc-7.10.3/usr/local/bin/ghc-8.4.3等)

我怎么知道的? 可以通过https://www.haskell.org/cabal/users-guide/installing-packages.htmlcabal install --help找到此命令。

后置条件是这样的:我安装QuickCheckghc-8.0.1ghc-6.12.1 ,然后~/.cabal/lib的样子:

➜  lib pwd      
/home/lee/.cabal/lib
➜  lib tree -L 2
.
├── x86_64-linux-ghc-6.12.1
│   └── QuickCheck-2.8.2-GeOZQRSfeF7EtuZhBovRUq
└── x86_64-linux-ghc-8.0.1
    └── QuickCheck-2.9.2-AzbjWrJo3WFD60ZxKurQ3s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM