无需重新编译生成普通和全暴露版本Haddock文档的解决方案问询
问题原因
Stack默认会复用已生成的Haddock产物,且不会感知--haddock-arguments的参数变更,因此第二次执行stack haddock时会直接跳过文档生成步骤,无需执行全量stack clean也有可落地的替代方案。
可行解决方案
方案1:使用独立工作目录隔离构建产物
这个方法完全避免两次构建的产物互相干扰,不需要清理原有缓存,源码编译步骤只会在第一次使用对应工作目录时执行一次,后续重复生成文档都可以复用编译缓存:
- 第一次生成默认版本文档:
执行完成后拷贝对应文档到发布目录stack haddock --work-dir .stack-work-default - 第二次生成全暴露模块版本文档:
执行完成后拷贝对应文档到发布目录stack haddock --haddock-arguments "--show-all" --work-dir .stack-work-showall
如果需要节省磁盘空间,你可以在所有文档生成完成后删除不需要的工作目录即可。
方案2:删除Haddock构建标记触发重建,复用全局编译缓存
Stack判断Haddock是否已生成只依赖对应模块目录下的.haddock-built标记文件,你只需要在两次生成文档之间删除这个标记和已生成的文档,不需要清理整个项目的编译产物,全程仅需编译一次源码:
- 先完成全量项目编译,避免后续步骤重复编译:
stack build - 生成默认版本文档,完成后拷贝到发布目录:
stack haddock --no-build - 删除所有已生成的Haddock标记和文档产物:
find $(stack path --dist-dir) -name ".haddock-built" -delete rm -rf $(stack path --local-install-root)/doc - 生成全暴露模块版本文档,完成后拷贝到发布目录:
stack haddock --no-build --haddock-arguments "--show-all"
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

