gpt4 book ai didi

haskell - 像 sdl-config 这样的配置工具如何与 cabalized 项目一起使用?

转载 作者:行者123 更新时间:2023-12-03 06:05:52 26 4
gpt4 key购买 nike

我有一个工作的 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

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

最佳答案

使用 Cabal 中的 configure 样式,您可以编写一个小配置脚本,用变量替换 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

$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 

哪个 cabal 将包含在构建中。

完成。

pkg-config工具的具体解决方案

对于支持 pkg-config-style 的工具配置,例如 sdlcairo 等,Cabal 已经有了特定的支持:

pkgconfig-depends: package list

A list of pkg-config packages, needed to build this package. They can be annotated with versions, e.g. gtk+-2.0 >= 2.10, cairo >= 1.0. If no version constraint is specified, any version is assumed to be acceptable. Cabal uses pkg-config to find if the packages are available on the system and to find the extra compilation and linker options needed to use the packages.

If you need to bind to a C library that supports pkg-config (use pkg-config --list-all to find out if it is supported) then it is much preferable to use this field rather than hard code options into the other fields.

因此,对于sdl,您只需要:

pkgconfig-depends: sdl

关于haskell - 像 sdl-config 这样的配置工具如何与 cabalized 项目一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com