【问题标题】:Cabal - Expose all modules while building libraryCabal - 在构建库时公开所有模块
【发布时间】:2013-08-06 15:21:58
【问题描述】:

是否可以告诉Cabal 在构建库时公开所有模块?

现在我必须在exposed-modules cabal 配置文件部分提供很长的模块列表。

【问题讨论】:

  • 您是否在问如何在不提及 .cabal 文件的情况下将模块合并到 cabal 项目中?
  • @Heatsink,否 - 如果您使用 cabal 编译库,则必须编写 <...>.cabal 配置文件。在此文件中,您必须提供Exposed-modules 部分,您必须在其中列出要公开的每个 模块。我想公开所有模块。
  • 这不能回答我的问题。每个模块都必须列在.cabal 文件中。内部模块也必须在Other-modules 中列出。您是在要求列出所有模块的替代方法,还是要求在不列出模块的情况下使用模块的方法?
  • @Heatsin:抱歉我的误解。我在要求列出所有模块的替代方法,但我很想知道在不列出模块的情况下使用模块的方法:)

标签: haskell cabal


【解决方案1】:

现代答案是stack + hpack,而不是使用显式的阴谋集团配置。它可以自动公开包模块并提供许多其他增强功能。

【讨论】:

    【解决方案2】:

    您必须在 cabal 配置文件中列出所有模块。在您的情况下,您只需将模块列表放在exposed-modules: 之后。没有更简单的方法来编写模块列表。

    Cabal 无法自动找到属于可执行文件或库的文件,因此它依赖于配置文件中的模块列表。与 GHC 不同,cabal 无法根据源代码中的 import 语句找到模块。如果你没有列出每个模块,那么你可能能够构建项目(因为 GHC 可以找到源文件),但其他命令如 cabal sdist 将无法访问未列出的源文件。

    【讨论】:

    • 如果您在非 Cabalised 源代码树上运行 cabal init,它将自动填充 exposed-modules,但之后您仍需要手动更新该字段。
    • @MikhailGlushenkov 这太荒谬了。它可以解析“init”上的导入语句(可能没有人使用过),但它不能对任何其他命令做同样的事情。这绝对是个问题。
    • 有没有可以更新exposed-modules的外部工具?或者stack可以吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2016-06-04
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多