堆栈构建创建输出可执行文件的两个副本

时间:2016-02-29 05:37:32

标签: haskell cabal haskell-stack

我是新手,而不是那些精通cabal的人。

我已将cabal项目转换为堆栈。它看起来很好。我到目前为止都喜欢它。

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

我唯一可以想到解释这个问题的方法是dist路径中的可执行文件包含(嵌入自身)在不同机器上运行此代码所需的所有包依赖关系(它已完成并准备就绪)用于分发到不同的计算机),而安装路径中的文件期望它在构建它的同一台机器上运行,并且这些依赖库安装在主应用程序代码外部。

这有意义吗?

任何其他解释?

戴夫史密斯

1 个答案:

答案 0 :(得分:5)

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

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