我有一個本地創作Haskell的項目,這既產生:如何使用堆棧來安裝本地創作的Haskell模塊以實現全局使用?
- 二進制可執行文件,
- 幾個新的哈斯克爾模塊,我想發到我的其他訪問,哈斯克爾基礎,可執行文件。
後:
stack build
stack install
我發現:
- 二進制可執行文件(#1,以上)運行在任何目錄下就好了。
- 但是,新的Haskell模塊(上面#2)只有在我從我的項目目錄中運行時才能找到! (也就是說,對於除#1以外的任何可執行文件)。
我需要能夠從任何地方找到新模塊。 我該如何做到這一點?
聽起來和[這個問題只有幾個小時前]類似(https://stackoverflow.com/questions/47989939/is-there-a-declarative-way-to-specify-packages-to-be-installed- into-global-proje),在那裏我建議你使用Cabal-install而不是stack,那麼你永遠不需要擔心模塊安裝是全局的。 – leftaroundabout
感謝您的評論。是的,「cabal install」確實解決了我的問題。然而,現在我已經有了兩個單獨的,並行的,大部分冗餘的Haskell設備來啃硬盤空間,這看起來非常浪費和不必要。這尤其令人憤慨,因爲我生產的二進制可執行文件可以在任何目錄下運行,這意味着它知道如何從我的系統的任何地方(因爲它導入它們)找到我的新Haskell模塊。那麼,爲什麼我不能讓這些新模塊可用於其他Haskell可執行文件呢? – dbanas
這絕對是不必要的,這就是爲什麼我在我的筆記本電腦上只使用_only_ Cabal-install,而僅使用Travis的Stack。 - 請注意,您的可執行文件找到導入模塊的方式與編譯器爲源文件找到它們的方式有很大不同。事實上,如果你靜態鏈接,那麼就不需要找到任何外部的東西,因爲一切都已經包含在二進制文件中了。如果您動態鏈接,它會查找特定散列動態庫文件的硬編碼路徑,但這隻適用於版本解析程序和鏈接程序在完成之前完成其工作。 – leftaroundabout