2013-08-08 2 views
10

Возможно ли написать файл конфигурации Cabal, который содержит несколько Library sections?Каббал с несколькими разделами библиотеки

я нашел в the documentation описание библиотеки раздел и Executables секции, так что кажется, что это невозможно поместить больше Библиотека раздел в одном файле конфигурации Кабал.

Но что делать, если я разрабатываю несколько библиотек Haskell и несколько исполняемых файлов
одновременно и хочу их компилировать и тестировать?

ответ

4

я узнал, что моя проблема может быть решена с Исла новейшую cabal-dev.

Если у вас есть 2 проекта: A и B, и вы хотите, чтобы развивать их параллельно, его хорошо использовать cabal-dev install A B - он будет строить и устанавливать их как на местном cabal-dev хранилище. Если вы выполните , перезапустите команду, они будут восстановлены и переустановлены, если необходимо.

Согласно документации - Если вы хотите зарегистрировать новый или переопределения существующих пакет на местного заговорщиков-DEV hackage, вы должны использовать cabal-dev add-source, которые в основном скопировать исходный код и позволяет установить его, как это был доступен по телефону hackage.

7

AFAIK, вы не можете поместить в библиотеку несколько библиотек. Имя, указанное в поле Name (на верхнем уровне файла cabal), используется как имя библиотеки, поэтому механизм указания имен дополнительных библиотек не существует.

На практике я не нашел, что это проблема. Я разрабатываю каждую библиотеку в отдельном каталоге с собственным файлом. После того, как вы запустили cabal install в библиотеке, которую вы разработали, ее можно найти в файле cabal для вашего исполняемого файла (в разделе Build-Depends), точно так же, как пакет в Hackage.

Так, например, если у вас есть две библиотеки с Кабал файлами, которые выглядят следующим образом:

Name:    my-library-1 
. . . 

и

Name:    my-library-2 
. . . 

Затем заговорщики файл для исполняемого файла может ссылаться на них, как это:

Вы даже можете потребовать определенные версии своих библиотек. Например:

Build-Depends: my-library1==1.2.*, 
        my-library2>=1.3 
+0

Спасибо, я знаю, что могу использовать его так, но я хотел упростить процесс разработки нескольких библиотек одновременно - и постоянно их переустанавливать, но кажется, что 'cabal-dev' решает мою проблему , –

+0

Ах, я не понимал, что вы можете так поступить с 'cabal-dev'. Возможно, вам захочется описать, как вы это сделали, сообщите об этом в качестве ответа здесь, а затем примите его. Другие могут быть заинтересованы в решении. – mhwombat

+0

@mhwombad - см. Ниже :) –

0

Это возможно в 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/ имеет некоторую информацию по этому вопросу.