我想要的是:cabal
来构建我的模块; make
构建这个脚本。
脚本链接到Objective-C(参见https://github.com/mchakravarty/language-c-inline/tree/master/tests/objc/marshal-array)。当我构建脚本时,导入失败:
$ make
Main.hs:1:1:
Bad interface file: dist/build/Commands/OSX/Events.hi
Something is amiss; requested module main:Commands.OSX.Events differs from name found in the interface file commands-0.0.0:Commands.OSX.Events
这里有一些文件内容:
$ cat Makefile
PACKAGES = -package template-haskell -package language-c-quote -package language-c-inline -package commands
FRAMEWORKS = -framework Carbon -framework Cocoa -framework Foundation
LDFLAGS = $(PACKAGES) $(FRAMEWORKS)
Main: Main.o
cabal exec -- ghc -o Main Main.o $(LDFLAGS)
Main.o:
cabal build
cabal exec -- ghc -c Main.hs -idist/build/ -v
...
$ cat commands.cabal
exposed-modules: Commands.OSX.Events
hs-source-dirs: sources
...
$ ghc --show-iface dist/build/Commands/OSX/Events.hi
interface commands-0.0.0:Commands.OSX.Events 7083
...
$ cat sources/Commands/OSX/Events.hs
module Commands.OSX.Events where
...
$ cat Main.hs
import Commands.OSX.Events
...
cabal构建成功,并且可执行文件编译并成功运行,如果我只是将所有内容放在同一目录中,并忽略cabal。
我可以告诉GHC某些模块是某个包的一部分吗?
我可以使用这些外部依赖项制作cabal可执行文件吗?
任何其他解决方案?
答案 0 :(得分:2)
显式命名模块包工作:
ghc -package-name commands-0.0.0
http://www.haskell.org/ghc/docs/7.2.1/html/users_guide/packages.html