Cabal 中“source-repository-package”和“本地无索引存储库”之间的区别

dan*_*iaz 5 haskell cabal

我知道我可以通过在文件的 部分中列出本地包来将其添加到 cabal 项目中。最简单的示例是.packages:cabal.projectpackages: .

我还cabal.project可以添加这两件事:

看来他们都让我将包添加到项目中。两者有什么区别?

注意:这个问题与类似名称的source-repository:字段无关,该字段只是说明哪个是与包的源代码关联的存储库。)

dan*_*iaz 7

实际上只是source-repository-package将“本地包”添加到您的项目中。它的行为与在 中列出包的源文件夹非常相似packages:,只不过源代码是根据需要下载的。特别是,cabal buildcabal clean.

因为它是您项目中的本地包,所以其他 cabal 项目不知道它。将其添加到其他本地项目中需要再次重新编译。


同时,本地无索引包存储库是 Hackage 或 Stackage 意义上的存储库,仅在本地文件系统中。它们可以在cabal.project单个项目的文件或全局 cabal 配置 ( ~/.cabal/config) 中指定。

在这些存储库中找到的包不被视为项目的“本地包”。它们的库被编译一次并在所有知道包存储库的项目之间共享(如果存储库在 中列出,则这将是所有项目~/.cabal/config)。之后不会触发重新编译cabal buildcabal clean