Haskell 包括 makefile 的堆栈构建

Haskell stack build including makefile

我正在开发一个库,它通过 inline-c 使用一些 C 绑定。截至目前,构建过程涉及一个 makefile,如下所示,因为我们首先需要从 inline-c 宏生成 C 存根,将它们编译成目标代码并 link 动态地编译它们,在本例中为 GHCi。

step1:
    ghc ${SRCDIR}/Internal/InlineC.hs -isrc/

step2:
    cc -c ${SRCDIR}/Internal/InlineC.c -o ${LIBDIR}/InlineC_c.o -I${PETSC_DIR_ARCH}/include -I${PETSC_DIR}/include

step3:
    ghci ${SRCDIR}/Test.hs ${SRCDIR}/Internal/InlineC.hs  ${LIBDIR}/InlineC_c.o  ${LIBDIR}/Internal.o -isrc/ -L${PETSC_DIR_ARCH}/lib -lpetsc -lmpich

问题

有没有办法将上述构建序列打包到 stack build 配方中?

提前致谢

是的,有。仔细阅读 Stack 指南并遵守正确的 .cabal 文件语法。

更准确地说,在类似情况下 (HaskellC -> C -> Haskell),请确保 .cabal 文件具有:

  • 通过在 library 节中指定 include-dirsextra-lib-dirsextra-libraries 字段在范围内绑定库。

  • c-sources 字段,指向与包含 [=15] 的 Haskell 文件具有 相同 名称的文件=] 东西(即所有 [C.exp| |] 用于包装 C 函数的准引号)但带有 .c 扩展名。 这将触发警告,因为 C 文件在构建开始时尚不存在,但它也会调用 gcc,它将处理 inline-c.

    [ 产生的 C 输出。 =31=]