我正在研究用Haskell编写的基于数据流的优化库。现在,图书馆似乎必须分为两部分:

  • 一个 具有最小的构建依赖性;叫它 hoopl-core.

  • 一个 满的 作品,称呼它 hoopl, ,这可能对诸如PrettyPrinter,QuickCheck等软件包具有额外的依赖性。

这个想法是格拉斯哥Haskell编译器将仅取决于 hoopl-core, ,这样一来,很难引导编译器。其他编译器将获得额外的好东西 hoopl. 。包裹 hoopl 将取决于 hoopl-core.

Debian软件包工具可以从单个源树构建多个软件包。很遗憾 Cabal尚未达到这一水平. 。但是,那里必须有其他有类似问题的库或应用程序设计师(例如,一个用于核心库的软件包,另一个用于命令行界面的软件包,另一个用于GUI界面的包装)。

当前使用Cabal构建和管理多个相关Haskell软件包的最佳实践是什么?

有帮助吗?

解决方案

我将两个软件包放在单独的子目录中,并有一个 Makefile 有这样的事情:

.PHONY: all hoopl hoop-core
all : hoopl

hoopl : hoopl-core
       cd hoopl && cabal build && cabal register --inplace

hoopl-core
       cd hoopl-core && cabal build && cabal register --inplace

假设您已经通过首先构建Hoopl核心并进行注册来引导该过程(--inplace)然后建造 hoopl. 。您可以使用Makefile自动化更多此功能。

如您所知,当我们想要GHC的类似功能时,我们会编写自己的构建系统;-)我不建议这样做。从技术上讲,我想可以从GHC构建系统中提取所需的零件并制作一个可重复使用的框架,但是...

其他提示

将两个软件包放入源控制存储库的单独子目录中,并使用两个单独的Cabal文件。

确保在移动文件时使用源控制系统的移动操作,以便正确跟踪历史记录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top