答案 0 :(得分:9)
您可以创建两个配置文件,例如~/.cabal/config
和~/.cabal/config7
,并使用un(der)文档选项--config-file
在两者之间进行选择。
答案 1 :(得分:8)
我认为--with-ghc
是合适的选择。
我在我的机器上使用多个ghc
版本。它们都有不同的名称,例如ghc-6.12.3
或ghc-7.4.1
。它们通常安装有这些名称,并通过创建从ghc
到ghc-7.4.1
的符号链接来选择默认编译器。
我认为对于不同的ghc
版本,您不需要不同的cabal目录。 Cabal为ghc-6.12.3
文件创建lib/yourpkg
子目录GHC-6.12.3
,依此类推。
此外,cabal update
不更新已安装的软件包,它只从您喜欢的软件包服务器中获取当前软件包列表。对于所有已安装的编译器,这应该是相同的。
答案 2 :(得分:5)
cabal update
没有--with-compiler
选项,因为它完全与编译器无关 - 它根本不涉及GHC或任何其他编译器。它只是从Hackage下载了一个可用软件包列表,仅此而已。您可以预期类似的东西适用于其他不允许您选择编译器的命令(因为开发团队小心翼翼地避免使用GHC特定的GHC版本,更不用说特定的GHC版本,只要有意义)。
答案 3 :(得分:5)
这个答案可以补充其他答案 (这已经很有启发性了。)
首先,知道
这有很大的不同
在GHC的次要版本之间。
例如,改变
从GHC 7.8到GHC 7.10
(参见burning bridges proposal)。
所以,它可能会更好
命名你的GHC二进制文件
还包括次要版本号,例如:
ghc7.8
和ghc7.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
您可以创建可执行文件
可能在cabal-ghc-7.8
中调用PATH
(它使用--config-file
选项described in n.m.'s answer):
#!/bin/bash
exec cabal --config-file=$HOME/.cabal-ghc-7.8/config "$@"
现在,在您的cabalized源代码中,
你可以简单地运行cabal-ghc-7.8 build
使用GHC 7.8构建源文件。
(或cabal-ghc-7.8 test
或其他任何东西)
您可以为已安装的所有GHC重复此过程。
当然,你不应该担心名为GHC的标准。
默认情况下,Cabal会搜索名为ghc
的GHC。
这个答案假设一个UNIX / Linux系统(就像使用bash
),但可以适应其他系统的变化很小。
答案 4 :(得分:1)
现在(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.html或cabal install --help
找到此命令。
后置条件如下所示:我为QuickCheck
和ghc-8.0.1
安装了ghc-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