9

現在のMakefileの代わりにCabalを使用してビルドしたいSDL/Haskellアプリケーションがあります(これが「Haskellの方法」であるため)。Makefile自体は非常に単純であり、デフォルトのcabalビルドプロセスにより、Makefileで指定されたビルドコマンドを再構築できることを期待していました。問題は、必要なすべてのcc-コンパイラオプションを提供するユーティリティである「sdl-config」を利用していることです。

wrapper.o: SDLWrapper_stub.h
    ghc -no-hs-main `sdl-config --cflags` -Wall wrapper.c -c

Cabalは、GHCを呼び出すときに、それをシェル呼び出しに拡張していないようです。コンパイル時にsdl-configのオプションをGHCにフィードするように指定するにはどうすればよいwrapper.oですか?

4

2 に答える 2

8

Cabalのスタイルを使用してconfigure、sdl-config コマンドの出力を変数に置き換える小さな構成スクリプトを作成できます。値は $foo.buildinfo.in ファイルで置き換えられ、Cabal がビルド プロセスに含める $foo.buildinfo ファイルが生成されます。

一般的な解決策: configure スクリプト

 #!/bin/sh

 SDLFLAGS=`sdl-config --cflags`
 echo Found "$SDLFLAGS"
 sed 's,@SDLFLAGS@,'"$SDLFLAGS"',' z.buildinfo.in > z.buildinfo       

$foo.builinfo.in ファイル

cc-options: @SDLFLAGS@

.cabal ファイル

Build-type:          Configure

「cabal configure」を実行すると、z.buildinfo の「cc-options」フィールドが作成され、保持されます。

cc-options: -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT 

どのカバールがビルドに含まれるか。

終わり。

pkg-config ツールの特定のソリューション

orなどのpkg-configスタイルの構成をサポートするツールについては、Cabal はすでに特定のサポートを提供しています。sdlcairo

pkgconfig-depends: パッケージ一覧

このパッケージをビルドするために必要な pkg-config パッケージのリスト。gtk+-2.0 >= 2.10、cairo >= 1.0 などのバージョンで注釈を付けることができます。バージョンの制約が指定されていない場合、どのバージョンも受け入れられると見なされます。Cabal は pkg-config を使用して、パッケージがシステムで利用可能かどうかを調べ、パッケージを使用するために必要な追加のコンパイルおよびリンカー オプションを見つけます。

pkg-config をサポートする C ライブラリにバインドする必要がある場合 (pkg-config --list-all を使用して、サポートされているかどうかを調べます)、他のフィールドにオプションをハードコードするよりも、このフィールドを使用することをお勧めします。 .

したがって、sdl必要なのは次のとおりです。

pkgconfig-depends: sdl
于 2011-05-17T17:44:12.530 に答える