【问题标题】:how to avoid repeated compilation of packages in extra-deps如何避免在 extra-deps 中重复编译包
【发布时间】:2017-08-16 07:00:09
【问题描述】:

我有一个由目录树中的几个包组成的项目。如果我更改其中一个包,那么堆栈通常会自动重新编译依赖于更改的包的包(有时自动化失败,我没有任何提示 - 但这不是问题的重点)。

在重新编译期间,我经常看到所有列为 extra-deps 的包的重新编译。这些都没有改变,重新编译是不必要的(但很耗时)。我知道有一些机制可以只编译一次这样的依赖项(只要它们没有改变)并被重用。我曾经从堆栈中看到一条消息,说某些以前的包编译被重用,指向这个缓存。

我在评论中被要求在项目目录中提供 stack.yaml(我也尝试过类似的条目

- location: /home/frank/Workspace8/repo8/litMain
  extra-dep: true

但没看出区别):

flags: {}
extra-package-dbs: []
packages:
- litMain      
- rdf4store    
- rdfhextension    
- uniform/uniform-strings    
- uniform/uniform-error     
- uniform/uniform-algebras      
- uniform/uniform-convenience       
- uniform/uniform-fileio       
- uniform/uniform-time       
extra-deps:
- chatter-0.8.0.1
- data-easy-0.7.0
- fullstop-0.1.4
- hgal-2.0.0.2
- non-negative-0.1.1
- numeric-prelude-0.4.2
- rdf4h-3.0.1
- test-invariant-0.4.5.0
- tokenize-0.3.0
resolver: lts-8.2

一般如何实现之前编译的、未改动的extra-deps的复用?

我尝试了构建、构建 --dependencies-only 和构建 --snapshot,但没有成功。所有依赖项都已重建...我在文档中找不到更多信息。

有用的 cmets 让我重新思考和编辑问题。我希望这个问题现在能更好地暴露出来。谢谢你的帮助!

【问题讨论】:

  • 单个项目中有多个包还是有多个项目(和多个stack.yamls)?
  • 也许可以给我们看看你的stack.yaml(s)的轮廓?!
  • stack.yaml 被编辑到问题中。我还找到了可能相关的信息,但我看不到如何在fpcomplete.com/blog/2015/09/stack-more-binary-package-sharing中使用
  • 我仍然很难理解您对问题的描述。您的句子“如果我更改其中一个项目,则堆栈不会自动更新依赖于该项目的另一个项目。”表示有多个项目,但你真的只有一个?也许您可以open an issue for stack 并包括重现您的问题所需的所有步骤。

标签: haskell-stack


【解决方案1】:

你是对的,只要额外的deps 不依赖于任何本地包,本地包中的更改不应该导致重新编译任何额外的deps。 (本地包是extra-deps 部分中列出的包。)

通常我的 extra-deps 只会在我升级堆栈或更改 resolver 时重新编译。

这表明堆栈的行为可能存在错误,因此如果您下次再次看到此冗余重新编译时可以为堆栈报告错误,那就太好了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多