为什么要配置 cabal?

Why do cabal configure?

Cabal User Guide 中,它说 Cabal 经常与 autoconf 和 automake 进行比较,因为实际配置和构建包的命令行界面遵循相同的步骤:

./configure --prefix=...
make
make install

相比
cabal configure --prefix=...
cabal build
cabal install

我的理解是 ./configure 使用一个配置文件(由 autoconf 生成)来使 make 过程适应它将 运行 所在的环境并检查依赖关系。所以 ./configure 因此总是有一个 "input" 来符合。但是,如果 cabal configure 没有给出任何参数,它会做什么,为什么在 运行ning cabal build?

之前有必要

cabal configure 这一步至少做了两件我知道的事情:

  • 检查包描述是否解析正确。
  • 检查是否已安装所有必需的依赖项(如果未安装则报告错误)。

基本上,运行 约束求解器可以准确决定您要针对哪些包进行构建。 (例如,如果您安装了 ByteString 的多个版本,您将使用哪个版本?好吧,这可能取决于您所依赖的软件包所期望的版本...)

此外,我相信可以在配置时提供选项,这些选项可以准确地更改构建包的哪些功能(但我没有这方面的经验)。

我认为最初你 必须 在你可以调用 build 之前调用 configure,但我相信现在 cabal 命令行在许多情况下,该工具会自动为您完成该步骤。 (例如,如果包描述文件比配置数据库更新,cabal run 现在似乎会自动重新配置。)