【问题标题】:Cabal: How to configure transitive build-dependencies in the same projectCabal:如何在同一个项目中配置传递构建依赖项
【发布时间】:2020-10-17 14:10:08
【问题描述】:

我有一个阴谋集团项目。它有库和测试目标。

测试目标取决于库,因为它测试库的功能。

问题是,每当我向库添加包依赖项时(例如,cryptohash-sha1

library Lib
  exposed-modules:     Lib
  other-extensions:    DeriveGeneric
  build-depends:       base >=4.13 && <4.14,
                       cryptohash-sha1,

然后运行测试,我得到错误

无法加载模块“Crypto.Hash.SHA1”。
它是隐藏包“cryptohash-sha1-0.11.100.1”的成员。
也许您需要在 .cabal 文件中的 build-depends 中添加“cryptohash-sha1”

在这种情况下我所做的是将相同的包添加到测试目标

test-suite json-generator-test
  hs-source-dirs:      test, src
  main-is:             Test.hs
  other-modules:       Lib
  build-depends:       base >=4.13 && <4.14
                       cryptohash-sha1,

只有这样测试才会运行。

我希望测试目标自动依赖库目标中的所有包。我该怎么做?

【问题讨论】:

    标签: haskell cabal


    【解决方案1】:

    您可以使用名为 common stanzas 的阴谋集团功能。您可以在以下博客文章中了解更多信息:

    使用这种方法,您可以将所有常见的依赖项放在一个单独的节中,然后将其导入库和测试套件中:

    common common-dependencies
      build-depends: base >=4.13 && <4.14
                   , cryptohash-sha1
    
    library Lib
      import:              common-dependencies
      exposed-modules:     Lib
      other-extensions:    DeriveGeneric
    
    test-suite json-generator-test
      import:              common-dependencies
      hs-source-dirs:      test, src
      main-is:             Test.hs
      other-modules:       Lib
    

    【讨论】:

    • 但它仍然不是一个可传递的构建依赖解决方案。它更像是一种语法,可以帮助您更轻松地复制和粘贴。 Cabal 不支持同一项目中的目标之间的构建依赖关系解析吗?
    • @Ingun전인건 Cabal 没有传递依赖的概念。部分是因为 Cabal 努力成为一个清单文件:明确指定所有内容并尽可能少地做隐含的事情。另外,你可以像在依赖中的模块一样命名你的本地模块,自动添加所有依赖会引入难以调试的冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2021-09-30
    • 2014-09-22
    • 2015-01-10
    • 2013-05-11
    相关资源
    最近更新 更多