Кабал с несколькими разделами библиотеки
Возможно ли написать файл конфигурации Cabal
, содержащий несколько Library sections
?
Я нашел в документацию описание раздела и Executables , < поэтому кажется, что невозможно поставить больше раздела библиотеки в один файл конфигурации Cabal.
Но что мне делать, если я разрабатываю несколько библиотек Haskell и несколько исполняемых файлов
одновременно и хотите их компилировать и тестировать?
Ответы
Ответ 1
Я узнал, что моя проблема может быть легко решена с помощью новейшего cabal-dev.
Если у вас есть 2 проекта: A
и B
, и вы хотите их развернуть параллельно, его приятно использовать cabal-dev install A B
- он будет строить и устанавливать их как в локальный репозиторий cabal-dev
. Если вы запустите эту команду, они будут перестроены и переустановлены, если необходимо.
В соответствии с документацией. Если вы хотите зарегистрировать новый или переопределить существующий пакет в локальном хакете cabal-dev, вы должны использовать cabal-dev add-source
, которые в основном копируют исходный код и позволяют установить его, как это было доступно на hackage
.
Ответ 2
AFAIK, вы не можете поместить более одной библиотеки в файл cabal. Имя, указанное в поле Name
(на верхнем уровне файла cabal), используется как имя библиотеки, поэтому механизм указания имен дополнительных библиотек не существует.
На практике я не нашел, что это проблема. Я разрабатываю каждую библиотеку в отдельном каталоге с собственным файлом. После запуска cabal install
в библиотеке, которую вы разработали, на нее можно ссылаться в файле cabal для вашего исполняемого файла (в разделе Build-Depends
), точно так же, как пакет в Hackage.
Итак, например, если у вас есть две библиотеки с кабальными файлами, которые выглядят следующим образом:
Name: my-library-1
. . .
и
Name: my-library-2
. . .
Затем файл cabal для вашего исполняемого файла может ссылаться на них следующим образом:
Name: my-program
. . .
Executable run-program
Main-Is: Main.hs
Build-Depends: my-library1,
my-library2,
. . .
Вы даже можете потребовать определенные версии своих библиотек. Например:
Build-Depends: my-library1==1.2.*,
my-library2>=1.3
Ответ 3
Это возможно в Cabal 2 с внутренними библиотеками, так называемыми "удобными" библиотеками: https://github.com/haskell/cabal/pull/3022. Это не позволит вам устанавливать эти библиотеки, но их просто можно скомпоновать в финальные исполняемые файлы и публичную библиотеку, открытую файлом .cabal
. Если вы хотите создать несколько вещей в процессе, вы должны использовать файл cabal.project
- http://blog.ezyang.com/2016/05/announcing-cabal-new-build-nix-style-local-builds/ содержит некоторую информацию об этом.