Haskell inline-c多步构建/链接与Cabal

时间:2015-10-10 09:52:40

标签: haskell cabal ffi template-haskell

我正在编写一个使用inline-c的FFI重型库,构建过程是:

  • inline-c文件上运行GHC,生成C
  • 将上一步生成的C编译成动态库
  • 编译Haskell接口,同时链接在步骤2中生成的目标文件和包装库的dynlibs。

问题:目前我在makefile中执行上述操作(请参阅http://caniuse.com/#feat=viewport-units),但我想将其打包成Cabal文件(工作版:https://github.com/ocramz/petsc-hs/blob/master/makefile} )。

子问题:

  • 如何控制Cabal中的构建/链接序列?
  • Cabal是否支持相对路径?无法在指南中找到这个,而且像bash一样~无法正常工作

提前感谢所有指针

1 个答案:

答案 0 :(得分:2)

  

如何控制Cabal中的构建/链接序列?

您可以在cabal文件中使用Build-Type: Custom,并使用自定义Setup.hs控制所有内容。

查看您可以控制的所有阶段的UserHooks data type

一些例子:

  

Cabal是否支持相对路径?无法在指南中找到这个并且像bash一样〜没有工作

如果您的库位于您的cabal软件包的外部,我会考虑在Unix / Linux系统上使用pkg-config让cabal找到该库。请参阅此SO问题的答案:How to specify dependency on external C library in .cabal?

如果您的图书馆是您的图书馆资料包的一部分,请查看此博客文章和相关的github repo,其中显示了如何编写自定义Setup.hs文件以在适当的地方构建和安装图书馆: