12

是否可以编写一个Cabal包含多个的配置文件Library sections

我在文档中找到了 Library section和 Executables section 的描述,因此似乎不可能在一个 Cabal 配置文件中放置更多 Library 部分

但是,如果我
同时开发了几个 Haskell 库和几个可执行文件,并且想要全部编译和测试,我该怎么办?

4

3 回答 3

8

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
于 2013-08-08T11:04:58.793 回答
6

这在带有内部库的 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/有一些关于这。

于 2017-11-17T11:05:09.123 回答
5

我发现,我的问题可以用最新的cabal-dev轻松解决。

如果您有 2 个项目:A并且B您想并行开发它们,那么它很好用cabal-dev install A B- 它会将它们都构建并安装到本地cabal-dev存储库。如果您重新运行此命令,它们将被重建并在必要时重新安装。

根据文档 - 如果你想在本地 cabal-dev hackage上注册新的覆盖现有的包,你应该使用它,它基本上复制源代码并允许你安装它,就像它在.cabal-dev add-sourcehackage

于 2013-08-09T10:31:01.987 回答