Woj*_*ilo 11 haskell build build-system cabal
是否可以编写Cabal包含多个配置文件的配置文件Library sections?
我在文档中找到了Library 部分和Executables 部分的描述,看起来似乎不可能在一个Cabal配置文件中放入更多的Library部分.
但是,如果我
同时开发几个Haskell库和几个可执行文件并想要编译和测试它们,我该怎么办?
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)
这在带有内部库的 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/有一些关于这个。