我有一个名为commands
的包。我想将它安装到自己的沙盒中,例如.cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d/commands-0.0.0-f3f84f48f42ac74a69ee5fd73512bfd0.conf
。目前,一个模块.hi
只有一个Commands
接口文件,我不知道它是如何实现的。
我尝试cabal install commands
,按照“我认为其他软件包是如何到达那里的”的逻辑,但它以未知软件包失败。
我也试过ghc-pkg
ghc-pkg update commands -f .cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d
之类的内容,但我没有正确使用它们。理想情况下,我想用阴谋来做这件事。
我尝试的最后一件事是ghc -idist/build/
,但它抱怨接口文件中的软件包名称不同,命令与main(“...与接口文件中找到的名称不同......”) 。如果我伪造了ghc -package-name commands-0.0.0
的可执行文件包,链接器会抱怨它找不到符号_ZCMain_main_closure
,因为每个可执行文件都需要模块main
中的函数Main
在包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通过language-c-inline)。我的makefile:https://github.com/sboosali/Haskell-DragonNaturallySpeaking/blob/master/Makefile)。因此,我必须明确编译脚本。我不知道如何使用cabal编译executable
,但我希望cabal构建并测试和管理我的library
。
通过将我的包放入沙箱,我将能够通过编译cabal exec -- ghc
从脚本中导入其模块。我至少也可以将脚本包含在extra-source-files
中,并且知道它会起作用。
答案 0 :(得分:2)
以下是我的尝试:
ghc-pkg --global unregister commands
cabal --enable-shared --disable-documentation --prefix=./ install /path/to/your/library/source
注意前缀规范。
答案 1 :(得分:0)
我核了它(rm -fr .cabal-sandbox/
),重新安装了所有内容(cabal install --only-dependencies
),将其自身添加为源(cabal sandbox add-source .
),安装它(cabal install command
)。然后make
工作了。 IDK的...