2014-10-07 61 views
0

我有一個包,名爲commands。我想將它安裝到自己的沙箱中,例如.cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d/commands-0.0.0-f3f84f48f42ac74a69ee5fd73512bfd0.conf。目前,一個模塊Commands只有一個.hi接口文件,我不知道它是如何到達那裏的。Cabal將當前包安裝到它自己的.cabal-sandbox/* - packages.conf.d中

我試着cabal install commands,按照「這就是其他軟件包如何到達那裏」的邏輯,但它以未知的軟件包失敗。

我也試過東西ghc-pkgghc-pkg update commands -f .cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d但我沒有使用它們的權利。理想情況下,我想用cabal做到這一點。

我試過的最後一件事是ghc -idist/build/,但它抱怨界面文件中的軟件包名稱不同,命令與main(「...與接口文件中發現的名稱不同......」)。如果我使用ghc -package-name commands-0.0.0來僞造可執行文件的包,鏈接器會抱怨找不到符號_ZCMain_main_closure,因爲每個可執行文件都需要包main中的模塊Main中的函數main

我相信有這樣做的更好方法。

我跟着我的陰謀文件網上的例子:

$ cat commands.cabal 
name: commands 
library 
exposed-modules: Commands.Types, Commands.Bits 
... 

最小的失敗代碼示例就是:

$ cat Main.hs 
import Commands.Types 
main = return() 
根項目目錄

上下文:我需要使用make(而不是cabal)構建我的可執行文件,因爲它通過language-c-inline鏈接到外部代碼(Objective-C)。我的makefile:https://github.com/sboosali/Haskell-DragonNaturallySpeaking/blob/master/Makefile)。因此,我必須明確編譯腳本。我不知道如何用cabal編譯executable,但我想要cabal編譯和測試並管理我的library

通過將我的軟件包放入沙箱,我將能夠通過編譯cabal exec -- ghc來從腳本導入其模塊。我至少也可以包含extra-source-files的腳本,並且知道它會起作用。

回答

2

這是我想嘗試:

  1. 首先註銷任何以前的命令庫。嘗試 ghc-pkg --global unregister commands
  2. 將新命令安裝到您的沙箱。 從您的sandbox目錄,試試這個: cabal --enable-shared --disable-documentation --prefix=./ install /path/to/your/library/source

注意前綴規範。

+1

你能解釋第一個和第三個選項的作用嗎? – 2014-10-07 04:58:48

+0

--prefix =。/未能在cabal-install 1.22.6.0.1上運行(cabal library 1.22.4.0,ghc 7.8.3)。不過,該命令與--prefix = ommitted配合使用。 – PypeBros 2015-09-24 09:46:38

0

我核爆它(rm -fr .cabal-sandbox/),重新安裝了一切(cabal install --only-dependencies),添加本身作爲一個源(cabal sandbox add-source .),安裝了它(cabal install command)。然後make工作。 idk ...