0

我正在开发一个通过inline-c. 到目前为止,构建过程涉及一个 makefile,如下所示,因为我们首先需要从 inline-c 宏生成 C 存根,将它们编译为目标代码并动态链接它们,在本例中为 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配方中?

先感谢您

4

1 回答 1

0

就在这里。仔细阅读堆栈指南并遵守正确的 .cabal 文件语法。

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

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

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

于 2015-11-27T00:52:00.343 回答