问题 Cabal有多个图书馆部分


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

我找到了 文件 图书馆的描述 部分 和可执行文件 部分,似乎,在一个Cabal配置文件中放置更多的库部分是不可能的。

但是如果我正在开发几个Haskell库和几个可执行文件,我该怎么办呢
同时想要编译和测试它们吗?


2534
2017-08-08 10:39


起源



答案:


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

7
2017-08-08 11:04



谢谢,我知道我可以像这样使用它,但我想简化一次开发多个库的过程 - 并且一直在构建和重新安装它们,但似乎 cabal-dev 解决了我的问题。 - Wojciech Danilo
啊,我没有意识到你可以做那种事情 cabal-dev。您可能想描述一下如何做到这一点,在此处作为答案发布,然后接受它。其他人可能对解决方案感兴趣。 - mhwombat
@mhwombad - 见下文:) - Wojciech Danilo


答案:


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

7
2017-08-08 11:04



谢谢,我知道我可以像这样使用它,但我想简化一次开发多个库的过程 - 并且一直在构建和重新安装它们,但似乎 cabal-dev 解决了我的问题。 - Wojciech Danilo
啊,我没有意识到你可以做那种事情 cabal-dev。您可能想描述一下如何做到这一点,在此处作为答案发布,然后接受它。其他人可能对解决方案感兴趣。 - mhwombat
@mhwombad - 见下文:) - Wojciech Danilo


我发现,我的问题可以通过最新的方便地解决 阴谋-dev的

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

根据文档 - 如果你想 注册新的 要么 覆盖现有的 打包 当地的cabal-dev hackage,你应该使用 cabal-dev add-source,它基本上复制源,并允许您像它可用的那样安装它 hackage


4
2017-08-09 10:31





这在带有内部库的Cabal 2中是可能的,所谓的“便利”库: https://github.com/haskell/cabal/pull/3022。这不会让你安装这些库,只允许将它们组成最终的可执行文件和公共库 .cabal 文件。如果你想要构建多个正在进行的事情,你应该使用a cabal.project 档案 - http://blog.ezyang.com/2016/05/announcing-cabal-new-build-nix-style-local-builds/ 有一些信息。


1
2017-11-17 11:05