Haskell inline-c 多步 build/link 与 Cabal
Haskell inline-c multi-step build/link with Cabal
我正在编写一个使用 inline-c
的 FFI-heavy 库,构建过程是:
- 运行 GHC 在
inline-c
文件上,生成 C
- 将上一步生成的C编译成动态库
- 编译 Haskell 接口,同时链接步骤 2 中生成的目标文件和包装库的动态库。
问题:目前我正在 makefile 中执行上述操作(参见 https://github.com/ocramz/petsc-hs/blob/master/makefile ), but I'd like to package it up in a Cabal file (working version : https://github.com/ocramz/petsc-hs/blob/master/petsc-hs.cabal)。
子问题:
- 如何控制 Cabal 中的 build/link 序列?
- Cabal 是否支持相对路径?找不到指南中提到的这个并且 bash-like
~
不起作用
提前感谢大家的指点
How does one control the build/link sequence in Cabal?
您可以在您的 cabal 文件中使用 Build-Type: Custom
并使用自定义 Setup.hs
控制一切。
查看 UserHooks
data type 您可以控制的阴谋集团的所有阶段。
一些示例:
- SDL - 使用
autoconfUserHooks
让 cabal 运行 一个 configure
脚本
- 这个 SO 答案包含覆盖
confHook
的包的链接:
- 查看此粘贴以获取指向更多自定义 Setup.hs 文件的链接:http://lpaste.net/142696
Are relative paths supported in Cabal? couldn't find this mentioned in the guide and bash-like ~ doesn't work
如果您的库在您的 cabal 包之外,我会考虑在 Unix/Linux 系统上使用 pkg-config
让 cabal 找到该库。查看此 SO 问题的答案:How to specify dependency on external C library in .cabal?
如果您的库是 cabal 包的一部分,请查看此博客 post 和相关的 github 存储库,其中显示了如何编写自定义 Setup.hs 文件来构建和安装图书馆在阴谋集团的正确位置:
我正在编写一个使用 inline-c
的 FFI-heavy 库,构建过程是:
- 运行 GHC 在
inline-c
文件上,生成 C - 将上一步生成的C编译成动态库
- 编译 Haskell 接口,同时链接步骤 2 中生成的目标文件和包装库的动态库。
问题:目前我正在 makefile 中执行上述操作(参见 https://github.com/ocramz/petsc-hs/blob/master/makefile ), but I'd like to package it up in a Cabal file (working version : https://github.com/ocramz/petsc-hs/blob/master/petsc-hs.cabal)。
子问题:
- 如何控制 Cabal 中的 build/link 序列?
- Cabal 是否支持相对路径?找不到指南中提到的这个并且 bash-like
~
不起作用
提前感谢大家的指点
How does one control the build/link sequence in Cabal?
您可以在您的 cabal 文件中使用 Build-Type: Custom
并使用自定义 Setup.hs
控制一切。
查看 UserHooks
data type 您可以控制的阴谋集团的所有阶段。
一些示例:
- SDL - 使用
autoconfUserHooks
让 cabal 运行 一个configure
脚本 - 这个 SO 答案包含覆盖
confHook
的包的链接: - 查看此粘贴以获取指向更多自定义 Setup.hs 文件的链接:http://lpaste.net/142696
Are relative paths supported in Cabal? couldn't find this mentioned in the guide and bash-like ~ doesn't work
如果您的库在您的 cabal 包之外,我会考虑在 Unix/Linux 系统上使用 pkg-config
让 cabal 找到该库。查看此 SO 问题的答案:How to specify dependency on external C library in .cabal?
如果您的库是 cabal 包的一部分,请查看此博客 post 和相关的 github 存储库,其中显示了如何编写自定义 Setup.hs 文件来构建和安装图书馆在阴谋集团的正确位置: