我有一个包,名为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-pkg
像ghc-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
的脚本,并且知道它会起作用。
你能解释第一个和第三个选项的作用吗? – 2014-10-07 04:58:48
--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