使用 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
我正在尝试编译一个使用 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