可移植地在 autoconf/automake 中包含 GLib 标头
Posted
技术标签:
【中文标题】可移植地在 autoconf/automake 中包含 GLib 标头【英文标题】:Portably include GLib headers in autoconf/automake 【发布时间】:2010-12-16 12:16:40 【问题描述】:我需要为使用基于 autoconf 的系统构建的项目包含 GLib 标头以实现可移植性。
如何以可移植的方式安全地导入 GLib 标头?我知道pkg-config,但这并不是完全可移植的(因为有些系统没有它,我宁愿只依靠 autoconf 进行配置)。
【问题讨论】:
哪些系统没有pkg-config? “没有”我的意思是默认情况下没有很好的支持(即Windows) 无论如何,如果可能的话,我宁愿只使用自动工具。如有必要,我可以求助于 pkg-config。 默认情况下没有系统有它。在 Windows 中,您可以使用原生的 gtk.org/download-windows.html 或 cygwin 的。 如果你想使用自动工具,你必须检查一些知名文件夹中的 glib 头文件和库,然后为你找到的内容设置变量。 【参考方案1】:通过使用PKG_CHECK_MODULES
宏,Autoconf 生成的configure
脚本可以自动检索 pkg-config 数据。例如,将此行添加到您的 configure.ac
文件中:
PKG_CHECK_MODULES([DEPS], [glib-2.0 >= 2.24.1])
将导致生成的configure
脚本确保安装的glib-2.0 版本大于或等于2.24.1 版本,并将pkg-config --cflags glib-2.0
的输出附加到变量DEPS_CFLAGS
和DEPS_LIBS
和pkg-config --libs glib-2.0
,分别。然后在_CFLAGS
和_LDADD
初选中使用$(DEPS_CFLAGS)
和$(DEPS_LIBS)
变量:
bin_PROGRAMS = hello
hello_CFLAGS = $(DEPS_CFLAGS)
hello_SOURCES = hello.c
hello_LDADD = $(DEPS_LIBS)
【讨论】:
在Makefile.am
中应该是hello_LDADD
而不是hello_LIBS
。
@ecerulm:我认为hello_LDADD
是在您的项目使用libtool 时使用的。
不,应该是hello_LIBADD
。 hello_LIBS
不存在。 *_LIBS
未在 automake doc 中提及。我试过hello_LIBS
对执行的gcc
命令没有任何影响。它被完全忽略,而hello_LDADD
具有在gcc
命令行末尾添加$(DEPS_LIBS)
的预期效果。
@ecerulm:啊!你说的对。我会更正我的答案。【参考方案2】:
GLib 2.22 INSTALL
文件指出 pkg-config
是安装此库的要求。我不是 GLib(双关语!);此要求的声明是INSTALL
文件顶部的第一件事。
从周围的文字中不清楚是否需要pkg-config
来编译 GLib 本身,但很明显 GLib 2.22 作者不打算让任何用户在没有 pkg-config 的情况下针对 GLib 进行编译。特别是 GLib 的 make install
会正确安装 .pc
文件。
为了平台可移植性,请指导用户适当设置$PKG_CONFIG_PATH
。
【讨论】:
以上是关于可移植地在 autoconf/automake 中包含 GLib 标头的主要内容,如果未能解决你的问题,请参考以下文章
安装 Autoconf, Automake & Libtool
使用 autoconf/automake,如何指定包含文件路径?