当给cabal简单构建系统一个自定义构建钩子时,为什么有两个PackageDescription结构?



可以在Setup.hs中重写cabal的简单构建系统的默认构建钩子,其形式如下:

main = defaultMainWithHooks simpleUserHooks { buildHook = myBuildHook }

,

myBuildHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> BuildFlags -> IO ()

所以我们得到了PackageDescriptionLocalBuildInfo,但是如果我们看一下后者,我们可以看到它包含了记录名称为localPkgDescr的前者。

鉴于此,我请求:

  1. 我们有两个PackageDescription的原因吗?
  2. 如果我们没有覆盖buildHook,哪个PackageDescription会被使用?

看起来第一个PackageDescription基本上代表了原始的<pkg>.cabal文件,而包装的PackageDescription包含了"resolved"的包描述,其中的标志被移除,并且所有的条件都被解决了。

我无法更仔细地检查这两个结构同时使用的代码段,所以我不能100%确定这种行为

最新更新