Haskell Cabal将当前包安装到自己的.Cabal sandbox/*-packages.conf.d中

Haskell Cabal将当前包安装到自己的.Cabal sandbox/*-packages.conf.d中,haskell,cabal,Haskell,Cabal,我有一个名为commands的包。我想将其安装到自己的沙箱中,例如.cabal sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d/commands-0.0.0-f3f84f48f42ac74a69ee5fd73512bfd0.conf。目前,对于一个模块命令,只有一个.hi接口文件,我不知道它是如何到达那里的 我尝试了cabal安装命令,逻辑是“我认为其他软件包就是这样到达那里的”,但在未知软件包的情况下失败了 我还尝试了使用ghc-pkg之类的东西,比如

我有一个名为
commands
的包。我想将其安装到自己的沙箱中,例如
.cabal sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d/commands-0.0.0-f3f84f48f42ac74a69ee5fd73512bfd0.conf
。目前,对于一个模块
命令
,只有一个
.hi
接口文件,我不知道它是如何到达那里的

我尝试了
cabal安装命令
,逻辑是“我认为其他软件包就是这样到达那里的”,但在未知软件包的情况下失败了

我还尝试了使用
ghc-pkg
之类的东西,比如
ghc-pkg更新命令-f.cabal sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d
,但我没有正确使用它们。理想情况下,我想和阴谋集团合作

我最后尝试的是
ghc-idist/build/
,但它抱怨接口文件中的包名不同,command与main(“与接口文件中的名称不同…”)。如果我用
ghc-package name commands-0.0.0
伪造可执行文件的包,链接器会抱怨它找不到符号
\ZCMain\u main\u 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
)构建我的可执行文件,因为它链接到外部代码(Objective-C通过language-C-inline)。我的makefile:)。因此,我必须显式地编译脚本。我不知道如何用cabal编译
可执行文件
,但我希望cabal构建、测试和管理我的

通过将包放入沙箱,我将能够通过使用
cabalexec--ghc
进行编译,从脚本导入其模块。我还可以至少在脚本中包含
额外的源文件,并且知道它可以工作。

以下是我尝试的内容:

  • 首先取消注册任何以前的命令库。尝试
    ghc pkg--全局注销命令
  • 在沙盒中安装新命令。 从沙盒目录中,尝试以下操作:
    cabal--启用共享--禁用文档--前缀=./install/path/to/your/library/source

  • 请注意前缀规范。

    我将其核化(
    rm-fr.cabal sandbox/
    ),重新安装了所有内容(
    cabal安装-仅依赖项
    ),将其自身添加为源(
    cabal sandbox add source.
    ),安装了它(
    cabal install命令
    )。然后使
    工作。idk…

    您能解释一下第一个和第三个选项的作用吗?--prefix=./在cabal install 1.22.6.0.1(cabal library 1.22.4.0,ghc 7.8.3)上运行失败。但是,该命令使用--prefix=ommitted。