Cabal有多个图书馆部分

Woj*_*ilo 11 haskell build build-system cabal

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

我在文档中找到了Library 部分和Executables 部分的描述,看起来似乎不可能在一个Cabal配置文件中放入更多的Library部分.

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

mhw*_*bat 7

AFAIK,您不能在cabal文件中放置多个库.Name字段中指定的名称(在cabal文件的顶层)用作库的名称,因此似乎没有用于指定其他库名称的机制.

在实践中,我没有发现这是一个问题.我在一个单独的目录中开发每个库,并使用自己的cabal文件.一旦你cabal install在你开发的库上运行,就可以在cabal文件中引用你的可执行文件(在本Build-Depends节中),就像Hackage上的一个包一样.

因此,例如,如果您有两个包含cabal文件的库,如下所示:

Name:              my-library-1
. . .
Run Code Online (Sandbox Code Playgroud)

Name:              my-library-2
. . .
Run Code Online (Sandbox Code Playgroud)

然后,您的可执行文件的cabal文件可以像这样引用它们:

Name:              my-program
. . .
Executable run-program
Main-Is:          Main.hs
Build-Depends:    my-library1,
                  my-library2,
                  . . .
Run Code Online (Sandbox Code Playgroud)

您甚至可以要求特定版本的库.例如:

Build-Depends:    my-library1==1.2.*,
                  my-library2>=1.3
Run Code Online (Sandbox Code Playgroud)


Woj*_*ilo 5

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

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

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


och*_*les 5

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