16

HackageでFFIバインディングを使用してライブラリを維持しています。したがって、私のHaskellライブラリは、対応するCライブラリとそのヘッダーファイルに依存しています。.cabalここで、次のようにファイルで外部依存関係を指定します。

PkgConfig-Depends:
      libfoo >= 1.2

そしてそれはLinuxで私にとってうまく機能します。pkg-configしかし、私には、 Windowsへのインストールはかなり面倒であり、代わりに彼が好むと報告しているライブラリのユーザーがいます。

Includes:
      foo.h
Extra-libraries:
      foo

ライブラリをできるだけ簡単にビルドできるようにしたいのですが、厳密に必要とされていない依存関係を強制的にビルドしたくありません。ただし、Cabalのマニュアルではを使用するように提案されているようPkgConfig-Dependsです。

私の質問:

  • クロスプラットフォームパッケージにはどちらの方法を選ぶべきですか?
  • .cabalある場合とない場合で機能するような方法でファイルを書き込むことは可能pkg-configですか?
  • そして、ちなみに、pkg-configHaskellプラットフォームに含まれています(私は今チェックするWindowsマシンを持っていません)?
4

2 に答える 2

15

pkg-configは、一部のシステムでは非標準の場所にある可能性のあるインクルードファイルとライブラリファイルの場所を知っているため、pkg-configメソッドが推奨されます。

.cabalファイルを記述して、両方の方法を使用できます。ここに示すように、フラグを使用すると、デフォルトが失敗した場合にCabalが他のフラグ値を自動的に試行するという利点があります。(以下の例はテストされていません)

Flag UsePkgConfig
  Description: Use pkg-config to check for library dependences
  Default: True

Executable hax
  if flag(UsePkgConfig)
    PkgConfig-Depends: libfoo >= 1.2
  else
    Includes: foo.h
    Extra-libraries: foo
于 2011-02-10T18:49:07.847 に答える
5

pkg-configHaskellプラットフォームには含まれていませんし、含まれるとは想像もできませんでした。

通常includes/Extra-libraries、比較的単純なものを使用します。しかし、gtkのように多くのライブラリが含まれている可能性のある複雑なパッケージの場合、利用可能な場合はpkg-configを使用する方がはるかに優れています。

特定のフィールドがある場合とない場合で機能する.cabalファイルを作成することができます。これを試して:

if os(windows)
  Includes:
      foo.h
  Extra-libraries:
      foo
else
  PkgConfig-Depends:
      libfoo >= 1.2

また、configureスクリプトを実行できることにも注意してください.cabal。これは、状況によっては役立ちますが、Windowsにはあまり適していません。

于 2011-02-10T18:46:06.260 に答える