如何将配置工具(如sdl-config)与cabalized项目一起使用?

fat*_*oku 9 haskell sdl cabal

我有一个工作的SDL/Haskell应用程序,我想使用Cabal而不是当前的Makefile构建(因为这是"Haskell方式").Makefile本身非常简单,我希望默认的cabal构建过程可以允许我重建我的Makefile中指定的构建命令.问题是它使用了"sdl-config",这个实用程序为您提供了所有必要的cc编译器选项:

wrapper.o: SDLWrapper_stub.h
    ghc -no-hs-main `sdl-config --cflags` -Wall wrapper.c -c
Run Code Online (Sandbox Code Playgroud)

在调用GHC时,Cabal似乎没有将其扩展为shell调用.如何指定在编译时应将sdl-config的选项输入GHC wrapper.o?

Don*_*art 8

使用configureCabal中的样式,您可以编写一个小配置脚本,用于替换sdl-config命令输出的变量.然后将这些值替换为$ foo.buildinfo.in文件,生成一个$ foo.buildinfo文件,Cabal将在构建过程中包含该文件.

一般解决方案:配置脚本

 #!/bin/sh

 SDLFLAGS=`sdl-config --cflags`
 echo Found "$SDLFLAGS"
 sed 's,@SDLFLAGS@,'"$SDLFLAGS"',' z.buildinfo.in > z.buildinfo       
Run Code Online (Sandbox Code Playgroud)

$ foo.builinfo.in文件

cc-options: @SDLFLAGS@
Run Code Online (Sandbox Code Playgroud)

.cabal文件

Build-type:          Configure
Run Code Online (Sandbox Code Playgroud)

当您运行"cabal configure"时,将创建z.buildinfo中的"cc-options"字段以保存:

cc-options: -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT 
Run Code Online (Sandbox Code Playgroud)

哪个cabal将包含在构建中.

完成.

pkg-config工具的特定解决方案

对于支持pkg-config- style配置的工具,例如sdl或者cairo其他,Cabal已经有了特定的支持:

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
Run Code Online (Sandbox Code Playgroud)