如果有一个库在本地签出,该库使用应用程序使用的cabal构建。我想根据本地库构建我的应用程序,而不是从hackage中构建,但我不知道如何做到这一点。这似乎是我应该做的事情,我只是不知道该怎么做。
沙盒
如果它很重要或使事情复杂化,则应用程序位于cabal沙箱中,其中cabal-sandbox-config
文件位于应用程序的路由目录中。
我正在努力实现的目标
我正在构建Yesod应用程序,我想调整其中一个依赖项(shakespeare)的行为。我想根据我的调整版本来构建我的应用程序。
使用专门为此用例设计的cabal sandbox add-source
。
示例:
$ git clone https://github.com/SomeUser/SomeDependency
$ cd /path/to/my-project
$ cabal sandbox add-source /path/to/SomeDependency
$ cabal build
另外,如果您稍后更新SomeDependency
并尝试重建my-project
,cabal
会注意到这一点并重新安装SomeDependency
。
选项1:
您可以克隆项目,然后在克隆的目录中运行cabal安装。git clone https://github.com/yesodweb/shakespeare.git
这将为您提供一个目录shakespeare
,其中将包含一个.cabal
文件。
因此,只需输入目录并运行cabal install
即可。这将安装shakespeare
。现在继续安装您的项目。
关键点:
您需要首先自己安装shakespeare,这样当您编译自己的项目时,ghc
或cabal
就不会尝试单独安装shakespeare依赖项(默认情况下从hackage开始)。
选项2:
- 安装黑客服务器
- 上传莎士比亚的副本(你的调整版本)到你当地的黑客
- 编辑你的cabal配置,将你的本地黑客攻击优先于haskell黑客攻击
远程回购:hackage.haskell.org:http://hackage.haskell.org/packages/archive
远程repo:local.hackage:http://local.hackage/packages/archive
如果你要调整几个软件包,这可能是有道理的,但你最好不要这样做,因为除其他外,跟踪调整后版本的更新将是一场噩梦。