我正在研究wxHaskell库,并且希望将我的开发工作与hackage的稳定wxHaskell分开,我正在以下列方式使用cabal-dev
:
cabal-dev add-source
添加每个wx
,wxcore
,wxdirect
); cabal-dev install wx
安装到沙箱本地包库中,检测到依赖项并构建和安装所有内容。ghc -package-conf
成功运行了测试代码,以指定沙盒包数据库的位置。当我对wxHaskell源进行修改时出现问题。为了构建和安装更新的代码,我必须使用cabal-dev install --reinstall
,这是有意义的,因为我没有增加版本号;构建发生,我看到“在...中安装库”和“注册...”,但我在代码中所做的更改不存在于重新编译的沙箱库中。
我目前的工作是删除cabal-dev
库,并在每次要重建时重复该过程。
答案 0 :(得分:2)
更新: cabal-install> = 1.18支持沙盒,并且比cabal-dev更好地维护。 Cabal-install还支持使用带沙箱的add-source。以下是cabal-install中新沙盒功能的说明:http://coldwa.st/e/blog/2013-07-30-Cabal-sandbox.html
旧回答:
正如您所发现的那样,'add-source'并不适用于积极改变项目。我不确定那里有一个很好的解决方案 - 很难跟踪一个add-source'd项目的位置(至少没有现有的基础设施),而且我不确定是否总是对的。
另一个工作流程可能会更好地为您服务 - 只需使用cabal-dev install
,指向您希望用于未来开发的沙箱。最近版本的cabal工具链(我的意思是Cabal,cabal-install和cabal-dev)允许这样的事情:
$ ls
wx wxcore wxdirect
$ cabal-dev install --sandbox=<path-to-some-sandbox> ./wx ./wxcore ./wxdirect
...
(注意:我没有用WX对此进行测试 - 可能会出现我不知道的扭结!)
假设一切按预期进行,将把本地子目录中的三个软件包安装到指定的沙箱中。更新源只是意味着为已更改的项目重新发出cabal-dev install命令。
请记住,您必须自己以正确的顺序发出重复的cabal-dev安装命令,或您必须使用上面的批处理命令和更新相应的版本号。
我没有声称这是理想的;)但我认为这比每次删除沙箱更好。
答案 1 :(得分:1)
经过一番调查后,我可以确认这是由于我对add-source
的使用存在误解的结果,详见the README的“使用沙箱本地黑客”部分,详情请参阅此处(强烈是我自己添加的,表明了我误解的原因):
Cabal-dev还允许您使用未发布的包,就像它们一样
与cabal-dev add-source
进行了讨价还价。
例如,仅linux-ptrace
和posix-waitpid
个包
最近上传到hackage。以前,cabal-dev用于构建
依赖于这两个包的应用程序:
$ ls
linux-ptrace/ myProject/ posix-waitpid/
$ cd myProject
$ cabal-dev add-source ../linux-ptrace ../posix-waitpid
$ cabal-dev install
请注意,cabal-dev add-source
接受源位置列表。
但请注意,因为已添加的软件包不是
再次与他们原始的源位置相关联。改变了
上面示例中的linux-ptrace
源将不会被使用
myProject
除非用户发出cabal-dev add-source
再次linux-ptrace
来源的路径。这类似于
您现在可以执行cabal install
步骤以使项目能够使用
改变了依赖。