是否可以编写一个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-sourcehackage