2016-02-29 35 views
2

我是新來堆棧,並不是所有精通cabal。堆棧構建創建輸出可執行文件的兩個副本

我已將cabal項目轉換爲堆棧。它似乎正在建設好。我喜歡它,到目前爲止。

但我觀察到一些我不明白的東西。當我執行堆棧構建命令時,我看到兩個輸出可執行文件被創建。兩者都位於.stack-work路徑中,其中一個在dist下,另一個在安裝下。他們有完全不同的尺寸。 dist路徑中的文件幾乎是安裝路徑中的文件大小的兩倍。

我能想到的唯一解釋是,dist路徑中的可執行文件包含(在其內部嵌入)在不同計算機上運行此代碼所需的所有程序包依賴性的可能性(它是完整的準備分發到不同的機器上),而安裝路徑中的文件希望它在構建它的同一臺機器上運行,並且這些相關庫安裝在主應用程序代碼的外部。

這有道理嗎?

任何替代解釋?

戴維·史密斯

回答

4

我也有我的機器上創建的兩個可執行文件....這是對我來說也是一個謎,但我想我知道答案。

一點偵探工作後,我發現,在〜/ .STACK工作/安裝可執行文件/ ....可以從相同的可執行文件在〜/ .STACK工作/ DIST創建/ ....通過運行strip。因此,我相信很明顯dist/....是創建最終簡化版本過程中的一個步驟,它存儲在install/....(並且稍後再次複製到〜/ .local/bin/)。

+1

這是正確的。通過調用'Cabal'庫的'copy'命令將'install'中的副本放置在那裏,當庫存在並且將被註冊(使用'register'命令)時,這是必需的。 –

+0

好吧,我現在已經閱讀了標籤爲「構建和安裝軟件包」的cabal用戶指南部分,但我仍然不完全清楚。我的目標是在我的Windows開發機器上運行的虛擬Ubuntu機器上構建獨立的可執行文件,然後在另一臺Ubuntu服務器上覆制並運行映像。 那麼我應該將哪些輸出可執行文件複製到目標環境? 感謝您的見解。 – dacDave

+0

@dacDave - 雙方將工作(我嘗試過),但一個在安裝/ ....是更「完整」的人,所以複製。 – jamshidh