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

发布于 2024-11-08 04:31:54 字数 408 浏览 2 评论 0原文

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

I have a working SDL/Haskell application that I would like to build using Cabal instead of the current Makefile (because that is the "Haskell way"). The Makefile is itself very simple, and I was hoping that the default cabal build process could allow me to reconstruct a build command specified in my Makefile. The problem is that it makes use of "sdl-config", a utility that gives you all the necessary cc- compiler options:

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

Cabal does not seem to expand that into a shell call when calling GHC. How can I specify that sdl-config's options should be fed into GHC when compiling wrapper.o?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半透明的墙 2024-11-15 04:31:54

使用 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”时,“cc- z.buildinfo 中的 options" 字段将被创建来保存:

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

哪个 cabal 将包含在构建中。

完毕。

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

对于支持 < em>pkg-config-style 的配置,例如 sdlcairo 等,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

Using the configure style in Cabal, you can write a little configure script that substitutes a variable for the output of the sdl-config command. The values will then be replaced in a $foo.buildinfo.in file, yielding a $foo.buildinfo file, that Cabal will include in the build process.

General solution: the configure script

 #!/bin/sh

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

The $foo.builinfo.in file

cc-options: @SDLFLAGS@

The .cabal file

Build-type:          Configure

When you run "cabal configure" the "cc-options" field in z.buildinfo will be created to hold:

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

which cabal will include in the build.

Done.

Specific solution for pkg-config tools

For tools that support the pkg-config-style of configuration, such as sdl or cairo and others, Cabal has specific support already:

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.

So for sdl you just need:

pkgconfig-depends: sdl
赏烟花じ飞满天 2024-11-15 04:31:54

$PROJ_NAME.cabal 文件中使用 Configure 构建类型,并从 $PROJ_NAME.buildinfo 生成 $PROJ_NAME.buidinfo 文件.in 模板,带有 configure 脚本。查看 Hackage 上 SDL 库的源代码作为示例。 Cabal 用户指南的本节提供更多详细信息。

提示:不要忘记在 extra-source-files 字段中提及 $PROJ_NAME.buildinfo.inconfigure

Use the Configure build type in your $PROJ_NAME.cabal file and generate a $PROJ_NAME.buidinfo file from a $PROJ_NAME.buildinfo.in template with a configure script. Look at the source of the SDL library on Hackage for an example. This section of the Cabal user guide provides more details.

One tip: do not forget to mention $PROJ_NAME.buildinfo.in and configure in the extra-source-files field.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文