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

问题描述 投票:26回答:5

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

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

haskell cabal
5个回答
9
投票

一种方法是使用Stack。编辑你的stack.yaml包括

flags:
  transformers-compat:
    transformers3: true

另见flags部分。


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。如果这不起作用,则可能是解算器中的错误。


9
投票

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

约束:hmatrix +揭示

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


8
投票

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

constraints: hmatrix +openblas

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

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


-2
投票

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

  1. 在cabal文件中添加包版本的下限和上限,如上面提到的Mikhailexample of such a file here
  2. 此外,您可以使用标志cabal install --constraint="bar-2.1"覆盖.cabal文件中的设置

要删除特定版本的包:

  • 在沙箱中,您可以使用cabal sandbox hc-pkg unregister bar-2.1取消注册版本
  • 可以使用sandbox ghc-pkg unregister bar-2.1之外的此命令完成全局取消注册
© www.soinside.com 2019 - 2024. All rights reserved.