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

sha*_*ang 28 haskell cabal

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

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

Mik*_*kov 15

看起来无法通过文件中的build-depends字段指定此类依赖项.cabal.buildDepends被定义为[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配置文件~/.cabal/config.将这样的约束行添加到文件的初始部分:

约束:hmatrix + openblas

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


Chr*_*nto 9

一种方法是使用Stack.编辑您stack.yaml的包含

flags:
  transformers-compat:
    transformers3: true
Run Code Online (Sandbox Code Playgroud)

另见标志部分.


小智 8

惊天动地的新版本让你指定的约束在您的cabal.project.localcabal.project文件.例如:

constraints: hmatrix +openblas
Run Code Online (Sandbox Code Playgroud)

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

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


Cha*_*ase 6

cabal现在支持一种类似于通过配置选项来执行此操作stack优雅方法cabal.project

package transformers-compat
    flags: +transformers3
Run Code Online (Sandbox Code Playgroud)

将在构建包时添加该标志。transformers3transformers-compat