我有两个本地库(我所说的本地库是指位于本地文件系统中,请原谅我的头韵),称为 bins 和 eeep,两者都构建得很好。现在 eeep 库需要 bins 库的功能,特别是类型类。所以我尝试了以下舞蹈:
首先添加一个
cabal.project
文件到eeep,内容如下:
packages:
.
../bins
相对路径
../bins
是 bins 库根目录的路径,包含 bins.cabal
文件。 bins 库的版本为 0.1,因此我将以下行添加到 eeep.cabal
字段中的 build-depends
:bins >=0.1 && <0.2
。一旦我cabal build
,即使我没有添加任何实际导入 bin 的代码,我也会得到:
Resolving dependencies...
Error: cabal: Could not resolve dependencies:
[__0] next goal: bins (user goal)
[__0] rejecting: bins-0.1.2.0, bins-0.1.1.1, bins-0.1.1.0 (constraint from
user target requires ==0.1.0.0)
[__0] trying: bins-0.1.0.0
[__1] next goal: eeep (user goal)
[__1] rejecting: eeep-0.1.0.0 (requires library from bins, but the component
does not exist)
[__1] fail (backjumping, conflict set: bins, eeep)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: bins, eeep
我显然缺少一个步骤或许多步骤,正如“需要来自垃圾箱的库,但组件不存在”行所建议的那样,但它是什么?尝试了更多的事情(例如在
cabal.project
中使用绝对路径)但无济于事。也尝试过谷歌搜索,但谷歌半人一定讨厌我,因为没有任何有用的结果。
使用 ghcup 并安装 ghc 9.6.6(且仅限该版本)。我很确定这将是另一个 doh 时刻,但需要任何其他信息,请询问。
编辑:进入 Hackage 时有一种预感,果然已经有一个 bins 库了。将我的垃圾箱重命名为 trisagion (并确保它正确构建),我明白了
Resolving dependencies...
Error: cabal: Could not resolve dependencies:
[__0] trying: eeep-0.1.0.0 (user goal)
[__1] next goal: trisagion (user goal)
[__1] rejecting: trisagion-0.1.0.0 (does not contain library, which is
required by eeep)
[__1] fail (backjumping, conflict set: eeep, trisagion)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: eeep, trisagion
所以“来自用户目标的约束”的东西消失了,但是“不包含 eeep 所需的库”仍然存在。那么我错过了什么? trisagion.cabal 只是一个简单的 cabal 文件,其中包含库和测试节(构建良好,所有测试都通过等)。我需要指示 cabal 执行什么额外步骤:构建
eeep
,您将需要 trisagion
,版本 >=0.1,可以在 ../trisagion
找到。我已经阅读了 cabal 文档(例如本地包与外部包的区别),所以我可能误解了它们,因为我描述的舞蹈是我认为我必须做的事情来构建依赖于另一个本地包的包。
编辑:回购链接:
您已命名您的图书馆:
library trisagion-lib
这隐式地将其标记为仅在内部可用,即仅对
trisagion
包中的其他组件可用。要修复,只需删除名称即可:
library