You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抑制Stack构建中外包依赖的GHC警告?

如何通过命令行抑制Stack构建中外包依赖的警告

问题描述

我在使用Stack构建项目时,会收到外包依赖包的警告,例如:

happy > /tmp/stack-d6caed253e9f21bf/happy-1.20.0/src/ProduceGLRCode.lhs:224:12: warning: [-Wincomplete-uni-patterns]
176happy > Pattern match(es) are non-exhaustive

我无法修改外包代码,因此不想看到这些警告,但仍希望通过GHC选项-Wall -Werror严格构建自身项目。请问是否有办法通过命令行操作实现?因为涉及大量项目,无法逐个更新stack.yaml。

已尝试的方法

  • 在stack.yaml中配置以下内容,结合命令行--verbosity warn可生效,但无法通过命令行指定该ghc-options配置:
    ghc-options:
        "$targets": -Wall -Werror
        "$everything": -w
    
  • 在stack.yaml中配置apply-ghc-options: targets,但该配置无效,仍会显示外包依赖的警告,且无法从命令行指定。

可行的命令行解决方案

方案1:通过Stack的目标指定GHC选项

直接在构建命令中为当前项目和依赖分别设置GHC选项,利用Stack的占位符区分目标:

stack build --ghc-options="$targets:-Wall -Werror" --ghc-options="$everything:-w" --verbosity warn
  • $targets:-Wall -Werror:仅对当前项目(本地目标)应用严格的警告检查规则
  • $everything:-w:对所有构建对象(包括第三方依赖)关闭所有警告
  • --verbosity warn:降低日志级别,过滤冗余输出

方案2:临时覆盖Stack配置参数

利用Stack的命令行配置覆盖功能,直接传递ghc-options的临时配置:

stack build --set ghc-options."\$targets"="-Wall -Werror" --set ghc-options."\$everything"="-w" --verbosity warn

注意:这里的\$是为了避免Shell解析变量,确保Stack能正确识别$targets和$everything这两个内置占位符。

方案3:输出过滤(应急方案)

如果上述GHC/Stack层面的配置不生效,可以通过管道过滤掉依赖的警告行,示例如下(以过滤happy依赖的警告为例):

stack build --ghc-options="-Wall -Werror" 2>&1 | grep -v "happy               >"

该方式需要根据实际依赖名称调整过滤规则,适合临时场景使用。

内容的提问来源于stack exchange,提问作者Abhijit Sarkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:25:38