【问题标题】:Cabal install current package into its own .cabal-sandbox/*-packages.conf.dCabal 将当前包安装到它自己的 .cabal-sandbox/*-packages.conf.d
【发布时间】:2014-10-07 03:26:42
【问题描述】:

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

我尝试了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/,但它抱怨接口文件中的包名称不同,命令与主文件不同(“...与接口文件中找到的名称不同...”)。如果我用ghc -package-name commands-0.0.0 伪造了可执行文件的包,链接器会抱怨它找不到符号_ZCMain_main_closure,因为每个可执行文件都需要MainMain 模块中的函数main

我确信有更好的方法来做到这一点。

我为我的 cabal 文件遵循了在线示例:

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

最小的失败代码示例只是:

$ cat Main.hs
import Commands.Types
main = return ()

在根项目目录中。

上下文:我需要使用make(不是cabal)构建我的可执行文件,因为它链接到外部代码(Objective-C 通过语言-c-inline)。我的生成文件:https://github.com/sboosali/Haskell-DragonNaturallySpeaking/blob/master/Makefile)。因此,我必须明确编译一个脚本。我不知道如何用 cabal 编译 executable,但我希望 cabal 构建、测试和管理我的 library

通过将我的包放入沙箱,我将能够通过使用cabal exec -- ghc 编译从脚本中导入它的模块。我也至少可以将脚本包含在extra-source-files 中,并且知道它会起作用。

【问题讨论】:

    标签: haskell cabal


    【解决方案1】:

    这是我要尝试的:

    1. 首先取消注册任何以前的命令库。尝试 ghc-pkg --global unregister commands
    2. 在您的沙箱中安装新命令。 从您的沙盒目录中,试试这个: cabal --enable-shared --disable-documentation --prefix=./ install /path/to/your/library/source

    注意前缀规范。

    【讨论】:

    • 你能解释一下第一个和第三个选项的作用吗?
    • --prefix=./ 无法在 cabal-install 1.22.6.0.1(cabal 库 1.22.4.0,ghc 7.8.3)上运行。不过,该命令与 --prefix= ommitted 一起使用。
    【解决方案2】:

    我对其进行了核对 (rm -fr .cabal-sandbox/),重新安装了所有内容 (cabal install --only-dependencies),将其自身添加为源 (cabal sandbox add-source .),安装了它 (cabal install command)。然后make 工作。想...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2012-09-30
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多