是否可以写一个 Cabal
配置文件,包含多个 Library sections
?
我找到了 文件 图书馆的描述 部分 和可执行文件 部分,似乎,在一个Cabal配置文件中放置更多的库部分是不可能的。
但是如果我正在开发几个Haskell库和几个可执行文件,我该怎么办呢
同时想要编译和测试它们吗?
是否可以写一个 Cabal
配置文件,包含多个 Library sections
?
我找到了 文件 图书馆的描述 部分 和可执行文件 部分,似乎,在一个Cabal配置文件中放置更多的库部分是不可能的。
但是如果我正在开发几个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
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
我发现,我的问题可以通过最新的方便地解决 阴谋-dev的。
如果你有2个项目: A
和 B
并且你想要并行开发它们,它很好用 cabal-dev install A B
- 它将构建并安装到本地 cabal-dev
库。如果你 重新运行 此命令将在必要时重建并重新安装。
根据文档 - 如果你想 注册新的 要么 覆盖现有的 打包 当地的cabal-dev hackage,你应该使用 cabal-dev add-source
,它基本上复制源,并允许您像它可用的那样安装它 hackage
。
这在带有内部库的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/ 有一些信息。