stack build 创建输出可执行文件的两个副本

stack build creates two copies of the output executable

我是堆栈的新手,对 cabal 不是很精通。

我已经将一个 cabal 项目转换为堆栈。它似乎建设良好。到目前为止我喜欢它。

但是我观察到一些我不明白的东西。当我执行堆栈构建命令时,我看到创建了两个输出可执行文件。两者都在 .stack-work 路径中,一个在 dist 下,另一个在 install 下。它们的尺寸完全不同。 dist 路径中的文件几乎是安装路径中文件大小的两倍。

我唯一能想到的解释是,dist 路径中的可执行文件可能包含(嵌入在其自身中)运行 此代码在不同机器上所需的所有包依赖项(它已完成并准备好分发到另一台机器),而安装路径中的文件期望它在构建它的同一台机器上 运行ning 以及那些依赖库安装在主外部的机器上申请代码。

这有意义吗?

还有其他解释吗?

戴夫·史密斯

我的机器上也创建了两个相同的可执行文件....这对我来说也是个谜,但我想我知道答案了。

经过一些侦探工作,我发现 ~/.stack-work/install/.... 中的可执行文件可以从 ~/.stack-work/dist/... 中的可执行文件相同地创建。 . 通过 运行 strip。因此我相信 dist/.... 是创建最终简化版本过程中的一个步骤,它存储在 install/.... 中(后来再次复制到 ~/.local/bin/).