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