在haskell-stack中设置GHC选项的各种方法如何协同工作

时间:2018-03-28 08:10:50

标签: haskell-stack compiler-flags

在为服务器应用程序的优化构建设置部署管道时,我遇到了使用stack-1.6.5正确获取GHC选项的麻烦。

特别是,从文档中我并没有清楚地了解指定GHC选项的各种方法如何协同工作以及何时以及如何应用它们。

据我所知,有X种方法可以指定GHC选项:

  • 全球ghc-options:和/或~/.stack/config.yaml,每个包或/etc/stack/config.yaml"$locals""$targets"
  • 项目"$everything"文件中的
  • ,每个包或stack.yaml"$locals""$targets"
  • 在项目"$everything" / package.yaml文件中,全局或按目标
  • 依赖项.cabal / stack.yaml / package.yaml个文件中的
  • 通过.cabal
  • 在堆栈命令行上
  • --ghc-optionsapply-ghc-options:和/或locals中有targets设置everything / stack.yaml / ~/.stack/config.yaml

我想知道在不同的构建阶段快照/本地/目标中应用了哪些选项,在哪种情况下它们是添加的或覆盖其他地方的选项。

1 个答案:

答案 0 :(得分:2)

好的问题,这没有充分记录。这些往往是添加剂。大多数逻辑都在这里:https://github.com/commercialhaskell/stack/blob/657937b0ac5dbef29114b43e9c69e2b57198af85/src/Stack/Build/Source.hs#L131。这是订单,列表中的后续项目稍后会提供给ghc的选项:

  • package.yaml / cabal文件中指定的选项。
  • 在stack.yaml 中的ghc-options中
  • $everything 在stack.yaml
  • 中的ghc-options中
  • $locals 在stack.yaml
  • 中的ghc-options中
  • $targets
  • 特殊选项,例如-fhpc( - 覆盖)/ fprof-auto -fprof-cafs( - profile)/ -g( - no-strip)。
  • 通过CLI上的--ghc-options指定的选项

目前,$everything中指定的$locals / $targets / .stack/config.yaml ghc-options不是加法的问题。相反,它们目前被项目stack.yaml遮蔽。有一个PR解决这个问题,它可能会在某个时候合并:https://github.com/commercialhaskell/stack/pull/3781