如何避免Asterius的ahc-link命令污染源码目录?
ahc-link 中间产物输出路径配置方法
--output-directory 参数仅控制ahc-link最终生成的JS、WASM及运行时相关文件的输出路径,不会修改底层GHC编译Haskell源码时生成的.hi接口文件、.o目标文件的默认存放规则——这两类中间文件默认会输出到对应源文件的同级目录,就是你遇到的源码目录污染问题。
要把这类中间文件也统一放到构建目录下,只需要通过--ghc-option参数把GHC原生的-outputdir配置透传给底层编译器,指定中间文件的存放路径即可。
正确命令示例
ahc-link --output-directory _build --ghc-option=-outputdir --ghc-option=_build/intermediate src/main.hs
执行上述命令后,所有.hi、.o中间文件都会按照源码的目录结构,统一存放到_build/intermediate目录下,不会再出现在源码目录中。
补充说明
- 增量编译场景下保持该参数不变,GHC可以正常识别已生成的中间文件,不会触发不必要的全量重编译
- 中间文件目录可以和
--output-directory指定的最终产物目录相同,不会产生冲突,注意清理构建目录时不要误删需要保留的文件即可 - 如果是通过Cabal、Stack这类构建工具集成Asterius,工具会自动配置中间文件输出路径,不需要手动添加该参数
内容的提问来源于stack exchange,提问作者Cactus
相关产品推荐
相关产品推荐

