【问题标题】:How do the various ways of setting GHC options in haskell-stack work together在 haskell-stack 中设置 GHC 选项的各种方法如何协同工作
【发布时间】:2018-03-28 08:10:49
【问题描述】:

在为优化构建服务器应用程序设置部署管道时,我在使用 stack-1.6.5 正确设置 GHC 选项时遇到了一些问题。

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

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

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

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

【问题讨论】:

    标签: haskell-stack compiler-flags


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2014-07-30
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多