【问题标题】:Haskell inline-c multi-step build/link with CabalHaskell inline-c 与 Cabal 的多步构建/链接
【发布时间】:2015-10-10 09:52:40
【问题描述】:

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

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

问题:目前我在 makefile 中执行上述操作(请参阅https://github.com/ocramz/petsc-hs/blob/master/makefile),但我想将其打包到 Cabal 文件中(工作版本:https://github.com/ocramz/petsc-hs/blob/master/petsc-hs.cabal)。

子问题:

  • 如何控制 Cabal 中的构建/链接顺序?
  • Cabal 是否支持相对路径?找不到指南中提到的这个,类似 bash 的 ~ 不起作用

提前感谢大家的指点

【问题讨论】:

  • 我查看了您的 cabal 文件,看来您正在遵循使用 inline-c 的秘诀。究竟是什么不起作用?

标签: haskell cabal ffi template-haskell


【解决方案1】:

如何控制 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?

如果您的库是 cabal 包的一部分,请查看此博客文章和相关的 github 存储库,其中展示了如何编写自定义 Setup.hs 文件以在正确的位置为 cabal 构建和安装库:

【讨论】:

  • 很好,非常感谢;我会尽快调查所有这些事情。
猜你喜欢
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多