为什么要配置 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
现在似乎会自动重新配置。)
在 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
现在似乎会自动重新配置。)