C 自动工具组件检查模块isn';t设置变量

C 自动工具组件检查模块isn';t设置变量,c,makefile,autotools,C,Makefile,Autotools,我的第一个autotools项目可能简单而愚蠢:它正在创建一个找不到glib和其他第三方库的makefile。(运行UbuntuLinux,编译C静态库,如果有必要的话。) Configure.ac包括以下几行: PKG_CHECK_MODULES([libglib], [glib-2.0 >= 2.28]) PKG_CHECK_MODULES([libobject], [gobject-2.0 >= 2.28]) PKG_CHECK_MODULES([libuuid], [uuid

我的第一个autotools项目可能简单而愚蠢:它正在创建一个找不到glib和其他第三方库的makefile。(运行UbuntuLinux,编译C静态库,如果有必要的话。)

Configure.ac包括以下几行:

PKG_CHECK_MODULES([libglib], [glib-2.0 >= 2.28])
PKG_CHECK_MODULES([libobject], [gobject-2.0 >= 2.28])
PKG_CHECK_MODULES([libuuid], [uuid])
Makefile.am如下所示

lib_LIBRARIES=libblah.a
libblah_a_SOURCES=blah.c util.c
libblah_a_CPPFLAGS=$(libglib_CFLAGS) $(libobject_CFLAGS) $(libuuid_CFLAGS)
libblah_a_LIBADD=$(libglib_LIBS) $(libobject_LIBS) $(libuuid_LIBS)
运行autoreconf--install会生成Makefile.in,其中包含以下内容:

libglib_CFLAGS = @libglib_CFLAGS@
libglib_LIBS = @libglib_LIBS@
libobject_CFLAGS = @libobject_CFLAGS@
libobject_LIBS = @libobject_LIBS@
libuuid_CFLAGS = @libuuid_CFLAGS@
libuuid_LIBS = @libuuid_LIBS@
看起来不错!除此之外,configure脚本声称它找到了这些库,但却抛出了一个Makefile,将上述行转换为无用:

libglib_CFLAGS = 
libglib_LIBS = 
libobject_CFLAGS = 
libobject_LIBS = 
libuuid_CFLAGS = 
libuuid_LIBS = 
救命啊

编辑:这是完整的configure.ac文件:

AC_INIT([amblah], [1.0], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 libblah/Makefile
 tests/Makefile
])
AC_OUTPUT
AC_PROG_RANLIB
PKG_PROG_PKG_CONFIG(0.26)
PKG_CHECK_MODULES([libglib], [glib-2.0 >= 2.28])
PKG_CHECK_MODULES([libobject], [gobject-2.0 >= 2.28])
PKG_CHECK_MODULES([libuuid], [uuid])

啊!我明白了问题所在,这绝对是一个愚蠢的新手问题。AC_输出是它输出Makefile输出等的原因。GNU教程对此并不清楚,我在AC_输出下面放了一些行。因此,当AC_输出生成其输出时,不考虑这些线路。通过将AC_输出移到最末端,它解决了问题。

直接运行
pkg config
时会得到什么输出?也许您正在运行带有
pkg_config=true的sane模式下的配置脚本。(注意,这有点开玩笑:PKG_CONFIG=true有效地禁用PKG_CHECK_模块,并要求用户正确分配LDFLAGS和CPPFLAGS。)这是不是缺少
AC_SUBST(XXX_CFLAGS)
AC_SUBST(XXX_LIBS)
用于这些库?@williampersell:
PKG CONFIG
检测库。在尝试迁移到autotools之前,我将其与手工制作的Makefile一起使用。例如,
pkg配置--libs glib-2.0
给出了
-lglib-2.0
。至于PKG_CONFIG,我没有在任何地方明确设置它。文件的grep在config.log中显示了这一点:
PKG_config='/usr/bin/PKG config'
@EtanReisner:我不熟悉AC_SUBST。我将在上面添加完整的configure.AC文件。