Ответ 1
Вы можете создать два файла конфигурации, например ~/.cabal/config
и ~/.cabal/config7
, и использовать параметр un (der), зарегистрированный --config-file
, чтобы выбрать между ними.
У меня на рабочем столе есть 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 на одном компьютере. например как продолжить установку, обновления и т.д.
Вы можете создать два файла конфигурации, например ~/.cabal/config
и ~/.cabal/config7
, и использовать параметр un (der), зарегистрированный --config-file
, чтобы выбрать между ними.
Я думал, что --with-ghc
является подходящим вариантом.
Я использую несколько версий ghc
на моей машине. Все они имеют разные имена, такие как ghc-6.12.3
или ghc-7.4.1
. Обычно они устанавливаются с этими именами, а компилятор по умолчанию выбирается путем создания символических ссылок от, скажем, от ghc
до ghc-7.4.1
.
Я думаю, вам не нужны разные каталоги для разных версий ghc
. Cabal создает подкаталог ghc-6.12.3
для lib/yourpkg
для ghc-6.12.3
файлов и т.д.
Кроме того, cabal update
не обновляет установленные пакеты, он извлекает только текущий список пакетов с ваших любимых серверов пакетов. Это должно быть одинаковым для всех установленных компиляторов.
cabal update
не имеет опции --with-compiler
, потому что он полностью компилятор-агностик - он вообще не связан с GHC или каким-либо другим компилятором. Он просто загружает список доступных пакетов из Hackage, не более того. Вы можете ожидать, что что-то подобное применимо к другим командам, которые не позволяют вам выбирать компилятор (так как команда разработчиков старалась избегать создания специфичных для конкретной GHC-функций, особенно для конкретной версии GHC, везде, где это имеет смысл).
Этот ответ служит дополнением к другим ответам (которые уже просвещают).
Прежде всего, знайте
что существуют значительные различия
между второстепенными версиями GHC.
Например, изменение
от GHC 7.8 до GHC 7.10
(см. предложение об открытии мостов).
Таким образом, это может быть лучше
назвать ваши двойные файлы 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
описанную в ответе n.m.):
#!/bin/bash
exec cabal --config-file=$HOME/.cabal-ghc-7.8/config "[email protected]"
Теперь, в вашем каскадном источнике,
вы можете просто запустить cabal-ghc-7.8 build
для создания исходных файлов с использованием GHC 7.8.
(или cabal-ghc-7.8 test
или что-либо еще)
Вы можете повторить процесс для всех установленных вами GHC.
Конечно, вы не должны беспокоиться о стандарте GHC.
По умолчанию Cabal ищет GHC с именем ghc
.
Этот ответ предполагает систему UNIX/Linux (например, использование bash
), но может быть адаптирован к другим системам с небольшими изменениями.
Теперь (версия для каббата 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
выглядит следующим образом: я установил 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