如何在含cabal.project的多cabal文件项目中共享common stanza?
实现共享Common Stanza的方法
完全可以实现,Cabal从2.2版本开始支持在项目层面定义可共享的common stanza,具体有两种常用方式:
方法一:直接在cabal.project中定义
在根目录的cabal.project文件里直接编写共享的common配置块,所有子目录的cabal文件都可以引用它:
- 编辑根目录的
cabal.project,添加common stanza:
common shared-lang-config default-language: Haskell2010 ghc-options: -Wall -Werror=incomplete-patterns default-extensions: OverloadedStrings RecordWildCards LambdaCase TypeApplications
- 在各个子目录的
*.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引入:
- 在根目录创建
common.stanza文件,写入共享配置:
common shared-lang-config default-language: Haskell2010 ghc-options: -Wall -Wcompat default-extensions: OverloadedStrings RecordWildCards LambdaCase
- 在
cabal.project中引入这个文件:
include common.stanza
- 子目录的
*.cabal文件同样通过import: shared-lang-config引用即可,和方法一的步骤2一致。
注意事项
- 确保所有
*.cabal文件的cabal-version字段设置为>=2.2,否则无法识别import语法。 - 如果需要给不同类型的target(比如库和测试用例)定义不同的共享配置,可以创建多个common块,分别引用即可。
内容的提问来源于stack exchange,提问作者tom
相关产品推荐
相关产品推荐

