【发布时间】:2014-02-12 21:00:28
【问题描述】:
当我在没有沙箱的情况下构建 Cabal 项目时,Cabal 会使用我安装的 Haskell 平台中的现有库。但是,如果我尝试在 Cabal 沙箱中执行相同的操作,Cabal 会强制将我的所有依赖项重新构建到沙箱中。
为了节省构建时间和磁盘空间,最好能够指示 Cabal 使用现有的 Haskell 平台库而不是重新构建它们。这可能吗?
示例 (files in a gist):
executable blog
hs-source-dirs: .
main-is: Test.hs
build-depends: base >= 4.5 && < 5
, text
如果我在包含此.cabal 文件的目录中cabal build,我的Test 模块将针对text 的Haskell 平台版本构建。
但是,如果我在沙盒中做同样的事情:
cabal clean # (or alternatively clone an empty gist)
cabal sandbox init
cabal build
我明白了:
$ cabal build
Package has never been configured. Configuring with default flags. If this
fails, please run configure manually.
Resolving dependencies...
Configuring install-test-0.1...
cabal: At least the following dependencies are missing:
text -any
如果我现在去cabal install,最新的text 库是在我的沙箱下从头开始构建的。
【问题讨论】:
-
我刚刚尝试了
git clone https://gist.github.com/8964143.git && cd 8964143 && cabal sandbox init && cabal run,这对我有用,无需重新编译依赖项。在 Windows 上安装 Cabal 1.18.0.2 和 Cabal 1.18.1.2。 -
嗯,也许我需要在较新的阴谋集团上尝试一下。我的是
cabal --version:cabal-install version 1.18.0.2, using version 1.18.1.1 of the Cabal library。或者是某种安装版本冲突。 :( -
@Toxaris:你在第一个
cabal build和第二个cabal sandbox init && cabal build之间做了cabal clean吗?如果这对您有用,那么克隆 gist 然后直接执行cabal sandbox init && cabal build怎么样?我意识到我的说明没有提到关于干净构建的部分。我将编辑我的帖子以包含此信息。 -
我从我的评论中直接执行了命令行,所以是的,我克隆了要点,然后直接执行
cabal sandbox init。现在我也尝试了git clone https://gist.github.com/8964143.git && cd 8964143 && cabal build && cabal sandbox init && cabal run和git clone https://gist.github.com/8964143.git && cd 8964143 && cabal build && cabal sandbox init && cabal run。他们都做一些配置和编译,然后打印“hello”。 -
我认为在这两种情况下你都会从
cabal build得到剩余的东西,这意味着沙盒构建什么都不做。你可以试试git clone https://gist.github.com/8964143.git && cd 8964143 && cabal sandbox init && cabal run- 它不应该工作。对此来回感到抱歉。
标签: haskell sandbox cabal cabal-install