使用多个GHC版本的cabal

vis*_*vis 16 haskell ghc cabal

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

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

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

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

n. *_* m. 10

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


小智 8

我认为--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.3cabal update


Dan*_*ner 5

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


Rud*_*ela 5

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

首先,要知道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)
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
exec cabal --config-file=$HOME/.cabal-ghc-7.8/config "$@"
Run Code Online (Sandbox Code Playgroud)

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

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

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