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

Posted

技术标签:

【中文标题】在 haskell-stack 中设置 GHC 选项的各种方法如何协同工作【英文标题】:How do the various ways of setting GHC options in haskell-stack work together 【发布时间】: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-optionsstack.yaml~/.stack/config.yaml 和/或/etc/stack/config.yaml 中有apply-ghc-options: 设置locals/targets/everything

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于在 haskell-stack 中设置 GHC 选项的各种方法如何协同工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储过程中设置日期时间可选参数?

在 Android BottomNavigationView 中设置所选项目

如何在 reactstrap 下拉菜单中设置所选项目?

如何在 BottomNavigationView 中设置所选项目

在 React 中设置单选按钮值

如何在 Android 中设置单选按钮