我知道我可以通过在文件的 部分中列出本地包来将其添加到 cabal 项目中。最简单的示例是.packages:cabal.projectpackages: .
我还cabal.project可以添加这两件事:
source-repository-package
type: git
location: git@github.com:haskell-streaming/streaming.git
tag: eb3073e6ada51b2bae82c15a9ef3a21ffa5f5529
Run Code Online (Sandbox Code Playgroud)
本地无索引存储库的定义
repository my-local-repository
url: file+noindex:///home/zzz/no-index-repo-dir
Run Code Online (Sandbox Code Playgroud)
看来他们都让我将包添加到项目中。两者有什么区别?
(注意:这个问题与类似名称的source-repository:字段无关,该字段只是说明哪个是与包的源代码关联的存储库。)
实际上只是source-repository-package将“本地包”添加到您的项目中。它的行为与在 中列出包的源文件夹非常相似packages:,只不过源代码是根据需要下载的。特别是,cabal build在cabal clean.
因为它是您项目中的本地包,所以其他 cabal 项目不知道它。将其添加到其他本地项目中需要再次重新编译。
同时,本地无索引包存储库是 Hackage 或 Stackage 意义上的存储库,仅在本地文件系统中。它们可以在cabal.project单个项目的文件或全局 cabal 配置 ( ~/.cabal/config) 中指定。
在这些存储库中找到的包不被视为项目的“本地包”。它们的库被编译一次并在所有知道包存储库的项目之间共享(如果存储库在 中列出,则这将是所有项目~/.cabal/config)。之后不会触发重新编译cabal build。cabal clean