Cabal - 构建库时暴露所有模块

22

在构建库的同时,是否有可能告诉Cabal暴露所有模块?

现在,我必须在exposed-modules的Cabal配置文件部分提供非常长的模块列表。


你是在询问如何将一个模块加入到Cabal项目中,而不在“.cabal”文件中提及它吗? - Heatsink
@Heatsink,不需要- 如果您正在使用cabal编译库,则必须编写<...>.cabal配置文件。在此文件中,您必须提供“Exposed-modules”部分,在其中必须列出您要公开的每个模块。我想公开所有模块。 - Wojciech Danilo
这并没有回答我的问题。每个模块都必须在.cabal文件中列出。内部模块也必须在Other-modules中列出。你是在询问列出所有模块的替代方法,还是在询问如何在不列出模块的情况下使用它? - Heatsink
@Heatsin:抱歉我误解了。我是在询问列出所有模块的替代方法,但我也很想知道如何在不列出模块的情况下使用它们 :) - Wojciech Danilo
2个回答

11

您需要在Cabal配置文件中列出所有模块。在您的情况下,只需在 exposed-modules: 后面列出模块列表即可。没有更简单的方法来编写模块列表。

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


9
如果你在一个未经 Cabal 处理的源代码树上运行 cabal init,它会自动填充 exposed-modules 字段,但你仍需要手动更新该字段。 - Mikhail Glushenkov
14
这相当荒谬。它可以解析“init”上的导入语句(可能没有人使用),但是不能对任何其他命令执行相同的操作。这绝对是一个问题。 - Nikita Volkov
3
жңүжІЎжңүеҸҜд»Ҙжӣҙж–°exposed-modulesзҡ„еӨ–йғЁе·Ҙе…·пјҹжҲ–иҖ…stackеҸҜд»Ҙеҗ—пјҹ - Erik Kaplun

10

现代的做法是使用stack + hpack代替显式的cabal配置。它可以自动暴露包模块并提供许多其他增强功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接