使用 PKG_CHECK_MODULES 的 Autoconf 不会设置 <prefix>_CFLAGS 和 <prefix>_LIBS 变量

Autoconf with PKG_CHECK_MODULES doesn't set <prefix>_CFLAGS and <prefix>_LIBS variables

我正在尝试编译一个使用 GLIB 和 DBUS 的应用程序。我有以下 configure.ac

AC_INIT([My awesome application], 1.0)
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
PKG_CHECK_MODULES([GLIB], glib-2.0 >= 2.0)
PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.0)
PKG_CHECK_MODULES([DBUSGLIB], dbus-glib-1 >= 0.1)
PKG_CHECK_MODULES([GIO], gio-2.0 >= 2.0)
PKG_CHECK_MODULES([GIOUNIX], gio-unix-2.0 >= 2.0)

那我有下面的Makefile.am

bin_PROGRAMS = myapp
myapp_SOURCES = myapp.c
myapp_CFLAGS = ${GLIB_CFLAGS}
myapp_CFLAGS += ${DBUS_CFLAGS}
myapp_CFLAGS += ${DBUSGLIB_CFLAGS}
myapp_CFLAGS += ${GIO_CFLAGS}
myapp_CFLAGS += ${GIOUNIX_CFLAGS}
myapp_LDADD = ${GLIB_LIBS}
myapp_LDADD += ${DBUS_LIBS}
myapp_LDADD += ${DBUSGLIB_LIBS}
myapp_LDADD += ${GIO_LIBS}
myapp_LDADD += ${GIOUNIX_LIBS}

当我运行make时,${xxxx_CFLAGS}${xxxxLIBS}的none都包含在gcc命令中。 编译失败,出现 glib.h not found 或库丢失错误。

如果我用 pkg-config 的输出替换 Makefile.am 中的每一个,如下所示:

bin_PROGRAMS = myapp
myapp_SOURCES = myapp.c
myapp_CFLAGS = -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
myapp_CFLAGS += -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
myapp_CFLAGS += -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include
myapp_CFLAGS += -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
myapp_CFLAGS += -I/usr/include/gio-unix-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
myapp_LDADD = -ldbus-glib-1 -ldbus-1 -lgobject-2.0 -lglib-2.0
myapp_LDADD += -lglib-2.0
myapp_LDADD += -ldbus-1
myapp_LDADD += -lgio-2.0 -lgobject-2.0 -lglib-2.0

然后编译,我可以运行应用程序。

我执行的所有步骤:

aclocal
autoconf
automake --add-missing --foreign
./configure
make

我是不是遗漏了什么或者变量名不正确? 请注意,我在这里搜索了几个问题,这些问题使用与我相似的构建并且 none 有效(例如 @xxxx_CFLAGS@$(xxxx_CFLAGS) ...

所以最后我只是在 configure.ac 文件中遗漏了 AC_OUTPUT。最终结果是:

AC_INIT([My awesome application], 1.0)
AC_CONFIG_AUX_DIR(config)
AM_INIT_AUTOMAKE([foreign])
LT_INIT
LT_PREREQ([2.2])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_MACRO_DIRS([m4])
PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.0)
PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.0)
PKG_CHECK_MODULES(DBUSGLIB, dbus-glib-1 >= 0.1)
PKG_CHECK_MODULES(GIO, gio-2.0 >= 2.0)
PKG_CHECK_MODULES(GIOUNIX, gio-unix-2.0 >= 2.0)
AC_OUTPUT