是否可以编写一个Cabal
包含多个的配置文件Library sections
?
我在文档中找到了 Library section和 Executables section 的描述,因此似乎不可能在一个 Cabal 配置文件中放置更多 Library 部分。
但是,如果我
同时开发了几个 Haskell 库和几个可执行文件,并且想要全部编译和测试,我该怎么办?
是否可以编写一个Cabal
包含多个的配置文件Library sections
?
我在文档中找到了 Library section和 Executables section 的描述,因此似乎不可能在一个 Cabal 配置文件中放置更多 Library 部分。
但是,如果我
同时开发了几个 Haskell 库和几个可执行文件,并且想要全部编译和测试,我该怎么办?
AFAIK,你不能在一个 cabal 文件中放置多个库。在字段中指定的名称Name
(在 cabal 文件的顶层)用作库的名称,因此似乎没有指定其他库名称的机制。
在实践中,我没有发现这是一个问题。我在一个单独的目录中开发每个库,并使用它自己的 cabal 文件。一旦你cabal install
在一个你开发的库上运行,那么它就可以在你的可执行文件的 cabal 文件中被引用(在 一Build-Depends
节中),就像 Hackage 上的一个包一样。
因此,例如,如果您有两个带有如下 cabal 文件的库:
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
这在带有内部库的 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/有一些关于这。
我发现,我的问题可以用最新的cabal-dev轻松解决。
如果您有 2 个项目:A
并且B
您想并行开发它们,那么它很好用cabal-dev install A B
- 它会将它们都构建并安装到本地cabal-dev
存储库。如果您重新运行此命令,它们将被重建并在必要时重新安装。
根据文档 - 如果你想在本地 cabal-dev hackage上注册新的或覆盖现有的包,你应该使用它,它基本上复制源代码并允许你安装它,就像它在.cabal-dev add-source
hackage