如何创建等效于无环境文件的GHC包环境文件?适配指定版本
创建包含GHC默认暴露包的环境文件的简便方法
针对GHC 9.8.2和Cabal 3.10.3.0版本,有两种优雅的方案可以生成包含所有默认暴露包的环境文件:
方案一:直接用ghc-pkg导出全局默认包
GHC自带的默认包都存放在全局包数据库里,通过ghc-pkg可以直接提取这些包名并生成环境文件:
ghc-pkg dump --global --package-db=clear --package-db=global | grep '^name: ' | sed 's/name: //' > ghc-defaults.env
--global指定只读取GHC的全局包数据库--package-db=clear --package-db=global确保忽略用户自定义和项目本地的包数据库,只保留默认全局包- 后续的
grep和sed用来提取并格式化包名,最终输出到目标环境文件
方案二:借助Cabal自动生成默认环境
利用Cabal构建时自动生成环境文件的特性,快速获取包含默认包的环境配置:
# 创建临时项目目录 mkdir temp-env-gen && cd temp-env-gen # 初始化一个极简的Cabal项目 cabal init --non-interactive --exe --name=temp-proj # 执行 dry-run 触发环境文件生成,无需实际编译 cabal build --dry-run # 复制生成的环境文件到目标位置 cp dist-newstyle/cache/ghc-environment-* ../ghc-defaults.env # 清理临时文件 cd .. && rm -rf temp-env-gen
Cabal在构建前会自动生成包含默认依赖包的环境文件,--dry-run参数避免了不必要的编译操作,节省时间。
验证生成的环境文件
生成后可以用以下命令确认环境文件包含所有默认包:
ghc-pkg list --package-env=ghc-defaults.env
内容的提问来源于stack exchange,提问作者Joseph Sible-Reinstate Monica
相关产品推荐
相关产品推荐

