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

如何在含cabal.project的多cabal文件项目中共享common stanza?

实现共享Common Stanza的方法

完全可以实现,Cabal从2.2版本开始支持在项目层面定义可共享的common stanza,具体有两种常用方式:

方法一:直接在cabal.project中定义

在根目录的cabal.project文件里直接编写共享的common配置块,所有子目录的cabal文件都可以引用它:

  1. 编辑根目录的cabal.project,添加common stanza:
common shared-lang-config
  default-language: Haskell2010
  ghc-options: -Wall -Werror=incomplete-patterns
  default-extensions:
    OverloadedStrings
    RecordWildCards
    LambdaCase
    TypeApplications
  1. 在各个子目录的*.cabal文件中,在需要应用配置的section(library、executable、test-suite等)里添加import: shared-lang-config:
cabal-version: >=2.2
name: my-sub-lib
version: 0.1.0.0

library
  import: shared-lang-config
  exposed-modules: MySubLib.Core
  build-depends: base >=4.14 && <5

方法二:将Common Stanza单独存为文件(更易维护)

如果共享配置内容较多,可以把common stanza单独放在一个文件里,再通过cabal.project引入:

  1. 在根目录创建common.stanza文件,写入共享配置:
common shared-lang-config
  default-language: Haskell2010
  ghc-options: -Wall -Wcompat
  default-extensions:
    OverloadedStrings
    RecordWildCards
    LambdaCase
  1. 在cabal.project中引入这个文件:
include common.stanza
  1. 子目录的*.cabal文件同样通过import: shared-lang-config引用即可,和方法一的步骤2一致。

注意事项

  • 确保所有*.cabal文件的cabal-version字段设置为>=2.2,否则无法识别import语法。
  • 如果需要给不同类型的target(比如库和测试用例)定义不同的共享配置,可以创建多个common块,分别引用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:33:28