我如何 link cabal 库和可执行文件?
How do I link cabal library and executable?
cabal-version: 3.4
name: SudokuSolver
version: 0.1.0.0
build-type: Simple
library sud
build-depends:
base
, text
hs-source-dirs: lib
exposed-modules: Sud.Rdg
default-language: Haskell2010
executable suSol
default-language: Haskell2010
hs-source-dirs: app
main-is: Main.hs
build-depends:
base
, optparse-applicative
, filepath
, text
当我运行“cabal build sud”时一切正常。
然而,当我 运行 "cabal build suSol" 我得到以下错误:
Could not load module ‘Sud.Rdg’
~ │ It is a member of the hidden package ‘SudokuSolver-0.1.0.0’.
~ │ Perhaps you need to add ‘SudokuSolver’ to the build-depends in your .cabal file.
~ │ Use -v (or :set -v
in ghci) to see a list of the files searched for.
这是我有点不知所措的地方,cabal 建议我将这个项目本身添加为构建依赖项?如果我这样做,我会得到:
Error: Dependency on unbuildable package SudokuSolver
│ In the stanza 'executable suSol' | In the inplace package
'SudokuSolver-0.1.0.0'
这对我来说很有意义,显然你不能将自己添加为构建依赖项。
但是我在这里错过了什么?
编辑:
如果我将 sud 添加到 build-depends 和“cabal build suSol”我得到:
Resolving dependencies...
cabal: Could not resolve dependencies: [__0] trying:
SudokuSolver-0.1.0.0 (user goal) [__1] unknown package: sud
(dependency of SudokuSolver) [__1] fail (backjumping, conflict set:
SudokuSolver, sud) After searching the rest of the dependency tree
exhaustively, these were the goals I've had most trouble fulfilling:
SudokuSolver, sud
当您为库添加名称时,这意味着它是您包的私有库或内部库。似乎 cabal 目前有一个错误,它会导致令人困惑的错误消息要求您将 SudokuSolver
添加到您的可执行文件的构建依赖项中,您可以改为添加 SudokuSolver:sud
.
然而,更常见的是保持库未命名(或给它与包相同的名称),这使它成为主要的 public 库。然后库的名称与包的名称相同,因此您应该真正将 SudokuSolver
添加到可执行文件的构建依赖项中。这是长期以来唯一可能的选择,内部图书馆相对较新。这可能也是为什么仍然存在一些这样的问题的原因。
我还注意到您可以按照 Willem van Onsem 的说法添加 sud
,但前提是您使用 cabal-version: 3.0
或更早版本。使用 cabal-version: 3.4
你必须使用 SudokuSolver:sud
(package-name:internal-library-name) notation.
编辑:我已经打开 an issue on the cabal GitHub repo。
cabal-version: 3.4
name: SudokuSolver
version: 0.1.0.0
build-type: Simple
library sud
build-depends:
base
, text
hs-source-dirs: lib
exposed-modules: Sud.Rdg
default-language: Haskell2010
executable suSol
default-language: Haskell2010
hs-source-dirs: app
main-is: Main.hs
build-depends:
base
, optparse-applicative
, filepath
, text
当我运行“cabal build sud”时一切正常。 然而,当我 运行 "cabal build suSol" 我得到以下错误:
Could not load module ‘Sud.Rdg’ ~ │ It is a member of the hidden package ‘SudokuSolver-0.1.0.0’. ~ │ Perhaps you need to add ‘SudokuSolver’ to the build-depends in your .cabal file. ~ │ Use -v (or
:set -v
in ghci) to see a list of the files searched for.
这是我有点不知所措的地方,cabal 建议我将这个项目本身添加为构建依赖项?如果我这样做,我会得到:
Error: Dependency on unbuildable package SudokuSolver
│ In the stanza 'executable suSol' | In the inplace package 'SudokuSolver-0.1.0.0'
这对我来说很有意义,显然你不能将自己添加为构建依赖项。
但是我在这里错过了什么?
编辑:
如果我将 sud 添加到 build-depends 和“cabal build suSol”我得到:
Resolving dependencies...
cabal: Could not resolve dependencies: [__0] trying: SudokuSolver-0.1.0.0 (user goal) [__1] unknown package: sud (dependency of SudokuSolver) [__1] fail (backjumping, conflict set: SudokuSolver, sud) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: SudokuSolver, sud
当您为库添加名称时,这意味着它是您包的私有库或内部库。似乎 cabal 目前有一个错误,它会导致令人困惑的错误消息要求您将 SudokuSolver
添加到您的可执行文件的构建依赖项中,您可以改为添加 SudokuSolver:sud
.
然而,更常见的是保持库未命名(或给它与包相同的名称),这使它成为主要的 public 库。然后库的名称与包的名称相同,因此您应该真正将 SudokuSolver
添加到可执行文件的构建依赖项中。这是长期以来唯一可能的选择,内部图书馆相对较新。这可能也是为什么仍然存在一些这样的问题的原因。
我还注意到您可以按照 Willem van Onsem 的说法添加 sud
,但前提是您使用 cabal-version: 3.0
或更早版本。使用 cabal-version: 3.4
你必须使用 SudokuSolver:sud
(package-name:internal-library-name) notation.
编辑:我已经打开 an issue on the cabal GitHub repo。