2
我有以下问题:管理两个依赖于彼此的cabal的库
我有两个依赖于对方的Haskell库,并且这两个库都由cabal管理。相应的阴谋文件看起来是这样的:
库1:
name: Lib1
version: 0.1
cabal-version: >=1.2
build-type: Simple
author: Matthias
library
hs-source-dirs: src
build-depends:
base >= 4,
Lib2
ghc-options: -Wall
exposed-modules: <...>
库2:
name: Lib2
version: 0.1
cabal-version: >=1.2
build-type: Simple
author: Matthias
library
hs-source-dirs: src
build-depends:
base >= 4,
Lib1
ghc-options: -Wall
exposed-modules: <...>
与cabal install
工程安装库(这里的库2)中的一个:
Resolving dependencies...
In order, the following will be installed:
Lib2-0.1 (reinstall)
Warning: Note that reinstalls are always dangerous. Continuing anyway...
Configuring Lib2-0.1...
Building Lib2-0.1...
Preprocessing library Lib2-0.1...
Registering Lib2-0.1...
Installing library in
C:\Users\Matthias\AppData\Roaming\cabal\Lib2-0.1\ghc-7.4.2
Registering Lib2-0.1...
但试图安装其他库(这里库1)与cabal install
导致产生错误信息:
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: Lib1-0.1 (user goal)
next goal: Lib2 (dependency of Lib1-0.1)
rejecting: Lib2-0.1/installed-aa4... (package is broken)
有什么办法来处理彼此依赖,使我没有得到相关性错误或者是阴谋根本不能够正确处理这种情况下两个这样的库?
我不认为这是永远不会工作。由于Cabal正在编译这些模块,因此您应该需要Lib1编译Lib2,反之亦然,因此都不应该先安装。老实说,我无法想象你是如何安装Lib2的 - 偶然,你有没有安装早期版本的Lib1而不依赖于Lib2?如果你这样做了,那么Cabal试图安装Lib1的时候它会破坏Lib2(这取决于Lib1)。尝试注销这两个软件包('ghc-pkg unregister')并再次尝试 - 我怀疑它会给出一组更清晰的错误。 – isturdy 2013-05-09 15:19:52
如果你甚至可以让它工作,循环依赖只会导致麻烦。通过将一些内容从一个包转移到另一个包,将通用代码提取到第三个包中,或者将这些包加入到一个包中来打破这个循环。 – hammar 2013-05-09 15:24:54