有没有办法为cabal依赖项定义标志?

时间:2014-05-07 16:58:08

标签: haskell cabal

我最近遇到了一个Cabal问题,我只是通过在我的cabal沙箱中手动安装transformers-compat -f transformers3标记来解决这个问题,然后为我的项目运行cabal install

有没有办法在我的应用程序的.cabal文件中指明我依赖于库,以便使用特定的构建标志构建它?

5 个答案:

答案 0 :(得分:15)

看起来无法通过build-depends文件中的.cabal字段指定此类依赖关系。 buildDepends is defined as [Dependency],其中data Dependency = Dependency PackageName VersionRange。不过,您可以使用cabal install --constraint="transformers-compat +transformers3"

查看transformers-compat.cabal文件,我认为如果您适当地约束对transformers的依赖,解算器应该能够找出正确的标记分配。例如。 build-depends: transformers >= 0.3 && < 0.4应强制解算器选择transformers-compat +transformers3。如果这不起作用,则可能是解算器中的错误。

答案 1 :(得分:9)

我也很努力找到解决这个问题的方法。我刚发现一个!您必须在~/.cabal/config修改全局cabal配置文件。像这样添加constraints行到文件的初始部分:

  

约束:hmatrix + openblas

这会为openblas包启用hmatrix标记。它将在下次安装软件包时自动使用。如果有办法在沙盒中本地设置这样的标志,我找不到它。

答案 2 :(得分:8)

执行此操作的一种方法是使用Stack。修改您的stack.yaml以包含

flags:
  transformers-compat:
    transformers3: true

另见flags部分。

答案 3 :(得分:7)

较新版本的Cabal允许您在cabal.project.localcabal.project文件中指定constraints。例如:

constraints: hmatrix +openblas
  

有没有办法在我的应用程序的.cabal文件中指出我依赖于库,以便使用特定的构建标志构建它?

不,但在你的情况下,这实际上并不是解算器中的一个问题,而是一个相当无意义的错误(由某人不太明智地使用标志引起)。

答案 4 :(得分:-2)

有几种方法可以限制安装版本。

  1. 在cabal文件中添加包版本的下限和上限,如上面提到的Mikhailexample of such a file here

  2. 此外,您可以使用标记cabal install --constraint="bar-2.1"

  3. 覆盖.cabal文件中的设置

    删除特定版本的软件包:

    • 在沙箱中,您可以取消注册cabal sandbox hc-pkg unregister bar-2.1
    • 的版本
    • 可以使用沙箱ghc-pkg unregister bar-2.1
    • 之外的此命令完成全局取消注册