带有多个图书馆部分的小屋



是否可以编写包含多个Library sectionsCabal配置文件?

我在文档中发现了库部分和可执行文件部分的描述,因此似乎不可能在一个Cabal配置文件中放入更多的库部分。

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

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

在实践中,我没有发现这是一个问题。我在一个单独的目录中开发每个库,有自己的cabal文件。一旦你在你开发的库上运行了cabal install,那么它就可以在你的可执行文件的cabal文件中被引用(在Build-Depends部分),就像Hackage上的包一样。

例如,如果你有两个带有cabal文件的库,它们看起来像这样:

Name:              my-library-1
. . .

Name:              my-library-2
. . .

然后你的可执行文件的阴谋集团文件可以这样引用它们:

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轻松解决。

如果你有两个项目:AB,并且你想并行开发它们,那么使用cabal-dev install A B是很好的——它会构建它们并将它们安装到本地cabal-dev存储库中。如果重新运行此命令,将重新生成它们,并在必要时重新安装。

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

相关内容

  • 没有找到相关文章

最新更新