2014-10-07 62 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 ...