4

让我们MyLib成为我当地的 Haskell 图书馆。我可以用 构建cabal build和安装它cabal install,但是我可以在其他项目中使用它而无需安装步骤吗?

我正在开发几个库并在每次更改后安装它们并不是一个好的解决方案。

4

2 回答 2

2

您的问题没有很好的解决方案,但您可以使用沙箱来保持您的开发环境更清洁。

使用 cabal-1.18 或更高版本,您可以创建一个沙箱,cabal sandbox init然后您可以安装到该沙箱或添加源 ( cabal sandbox add-source <path to library>)。

这有助于将不稳定的库(及其潜在的不稳定依赖项)排除在您的用户包数据库之外,并有助于防止“阴谋集团”(依赖项之间无法解决的冲突)。但是,这并不能直接帮助减少每次您想要进行顶级构建时需要发出的命令数量。

但是,您可以做的是设置一个简单的脚本来执行 add-source 命令并构建您的顶级包。例如:

#!/bin/bash
cabal sandbox init # a no-op if the sandbox exists.
cabal sandbox add-source ../MyLib
cabal install --dependencies-only
cabal build

当然,您以前可以这样做,但这次您也可以通过清理沙箱轻松清理(删除所有已安装的工件):

cabal sandbox delete
于 2013-10-08T23:11:25.850 回答
2

假设您有两个完全独立的项目,一个名为my-library,另一个名为my-project. 并且my-project取决于my-library.

构建my-library并使其可用于其他项目的方式是cabal install my-library. 完成后,任何其他项目都可以使用该库。

现在您已准备好my-project使用命令进行构建cabal install my-project。它不会重新构建或重新安装my-library,但会将您的项目与库链接。

现在,如果您对 进行修改my-library,请务必在运行之前更新版本号cabal install my-librarymy-project如果您忘记修改版本号,您将收到将被废弃的警告。现在您的库的旧版本和新版本可供其他项目使用。

您可以继续运行您的项目。他们会很高兴地继续使用以前的版本my-library 直到您使用另一个cabal install my-project. 因此,无需在每次更改后重新安装所有内容。

如果您确实想要重建您的项目,但继续使用旧版本的库,您可以在build-dependscabal 文件的部分中指定。例如,如果您my-library安装了 1.0 和 2.0 版本,您可以像这样针对旧版本构建项目:

build-depends: my-library==1.0, ...
于 2013-08-06T16:58:11.543 回答