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-dirs
、extra-lib-dirs
和 extra-libraries
字段在范围内绑定库。
c-sources
字段,指向与包含 [=15] 的 Haskell 文件具有 相同 名称的文件=] 东西(即所有 [C.exp| |]
用于包装 C 函数的准引号)但带有 .c
扩展名。
这将触发警告,因为 C 文件在构建开始时尚不存在,但它也会调用 gcc,它将处理 inline-c
.
[ 产生的 C 输出。 =31=]
我正在开发一个库,它通过 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-dirs
、extra-lib-dirs
和extra-libraries
字段在范围内绑定库。
[ 产生的 C 输出。 =31=]c-sources
字段,指向与包含 [=15] 的 Haskell 文件具有 相同 名称的文件=] 东西(即所有[C.exp| |]
用于包装 C 函数的准引号)但带有.c
扩展名。 这将触发警告,因为 C 文件在构建开始时尚不存在,但它也会调用 gcc,它将处理inline-c
.