0

を介していくつかの C バインディングを使用するライブラリを開発しています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-dirsおよびextra-librariesフィールドを指定して、スコープ内でライブラリーをバインドします。library

  • このフィールドは、内容 (つまり、C 関数をラップするためのすべての準引用符)を含む Haskell ファイルと同じc-sources名前のファイルを指しますが、拡張子が付いています。ビルドの開始時に C ファイルがまだ存在しないため、これにより警告がトリガーされますが、gcc も呼び出され、gcc によって生成された C 出力が処理されます。inline-c[C.exp| |].cinline-c

于 2015-11-27T00:52:00.343 に答える