您的位置:首页 > 其它

在AutoMake宏里面用pkg-config

2010-12-09 23:50 316 查看

在AutoMake宏里面用pkg-config

之前一直在找的用法, 终于被挖出来了, 兴奋~

pkg-config 能帮忙管理系统上安装的库, 比如pkg-config glib --libs --cflags, 能输出编译时候需要写到makefile里面的-Ixxx -lyyy

很多资料都在说自己写makefile的时候, 可以用这个来帮忙写包含路径, 但是在复杂一点的环境里面手写makefile简直是跟自己过不去

之前一直只好把pkg-config写进makefile.am去, 写在CFLAGS和LDFLAGS那边, 勉强算是半自动的了

本来automake可以写宏 在./configure的时候, 帮助检查系统里面的头文件, 库支持之类, 比如如果有在configure.in里面写检查libmysql, 最后的makefile会帮你加上-lmysqlclient, 但是-I不会帮你搞定

最理想的情况, 那就是我直接把pkg-config整合到automake的宏里面去, 用pkg-config来直接帮忙检查头文件和连接库, 连带编译时候的参数一并搞定

中间找了不少automake的资料, 一直没搞定, automake官方的文档里面对各个宏的解释比较简略, 而且没有实例讲解, pkg-config是另外独立的程序, 库的路径和链接都是输出在stdout的

今天终于找到了关键的用法, 之前看别人的现成项目里面检查库文件的宏, 要么是很土, 相当于手工检查, 要么是项目实在太大, 宏文件看得眼花, 没找着它检查库的地方

今天看到GNet的手册, 终于看到一个在automake里面能一条龙做完的实例了

http://www.gnetlibrary.org/docs/gnet-developers.html

PKG_CHECK_MODULES(GNET, gnet > 2.0.0,

[LIBS="$LIBS $GNET_LIBS" CFLAGS="$CFLAGS $GNET_CFLAGS"],

AC_MSG_ERROR(Cannot find GNet: Is gnet-config in path?))

GNET是一个名字, 可以改成其他的, gnet > 2.0.0 是pkg-config能接受的检查语法, 关键点在后面的$GNET_LIBS和$GNET_CFLAGS

这两个变量把pkg-config的输出分开成头文件路径参数和链接库参数了, 这里的GNET就是前面定的那个名字

有了这个, 其他的什么AC_CHECK_LIBS AC_HEADER AC_CHECK_FUNCS 全部都可以退休了, 哇哈哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: