Haskell 将GHC中的各个项目连接起来

Haskell 将GHC中的各个项目连接起来,haskell,ghc,Haskell,Ghc,好的,这应该很简单,但似乎无法解决这个问题。我有两个项目,ProjectA和ProjectB。ProjectB依赖于旧项目ProjectA。现在我想建立ProjectB。我现在不想更改ProjectA的目录结构。问题是,我总是在ProjectA中使用-outputdir-bin ProjectA是这样的: ProjectA/ bin/ (*.o, *.hi in proper paths, sometimes also *.p_o and *.p_hi) Foo/ Mod

好的,这应该很简单,但似乎无法解决这个问题。我有两个项目,ProjectA和ProjectB。ProjectB依赖于旧项目ProjectA。现在我想建立ProjectB。我现在不想更改ProjectA的目录结构。问题是,我总是在ProjectA中使用-outputdir-bin

ProjectA是这样的:

ProjectA/
  bin/
    (*.o, *.hi in proper paths, sometimes also *.p_o and *.p_hi)
  Foo/
    ModuleX.hs
  ModuleA.hs
  ModuleB.hs
现在我有了一个不同的ProjectB文件夹,它有自己单独的-outputdir。我只需要链接到旧的项目对象文件(无需重新编译ProjectA文件)。我意识到我可能可以将项目。。。但是没有更简单的方法吗?

简单的方法是使用阴谋集团。一旦你安装了一个项目,你就再也不用担心它到底存储在哪里了;GHC会找到它的

如果您不想这样做,请尝试使用切换到GHC的
-i
命令来告诉要搜索已编译内容的文件夹


我已经试过了-我在发布此信息之前已经试过了。做我想要的一切,除了它还重新编译ProjectA中的一切。我希望能找到一个类似的“gcc x.o y.o”。至于阴谋集团,这是可行的,但我不想把它放在我的~/.Cabal文件夹中,因为我只在2-3个项目中使用它。我不想让它出现在我对每个项目的搜索路径中。文档声称,在
--make
模式下,它将在指定目录中查找源文件,但在其他情况下,它将查找接口(可能还有对象)文件。当然,由于GHC 7(?)
——make
模式现在一直是默认模式,我不知道如何关闭它……还有,当你说“旧项目”时,它是用同一版本的GHC编译的吗?因为如果没有,那么你就别无选择,只能重新编译。@Savui,如果你不想污染你的
~/.cabal
,请检查一下,在我看来,你需要一个编译系统。如果你不喜欢cabal(或makefiles),试试shake()谢谢,我会看看shake,但我真的不需要make的替代品。事实上,我现在是make的一个非常愉快的用户。问题是,GHC似乎有这种奇怪的方式来搜索.o和.hi文件,而这些文件似乎没有足够的可定制性。换句话说,如果我添加-outputdir bin。。。它将在bin中查找预编译文件,但我找不到将其更改为ProjectA/bin的方法