2014-01-10 118 views
0

我的第一個自動工具項目可能是簡單而愚蠢的:它創建了一個找不到glib和其他第三方庫的makefile。 (運行Ubuntu Linux操作系統,編譯C靜態庫如果該事項。)Autotools PKG_CHECK_MODULES未設置變量

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 - 安裝生成Makefile.in與此:

libglib_CFLAGS = @[email protected] 
libglib_LIBS = @[email protected] 
libobject_CFLAGS = @[email protected] 
libobject_LIBS = @[email protected] 
libuuid_CFLAGS = @[email protected] 
libuuid_LIBS = @[email protected] 

看起來不錯!配置腳本聲稱它發現這些庫還吐出一個Makefile,將上面的行轉換成這種無用的文件:

libglib_CFLAGS = 
libglib_LIBS = 
libobject_CFLAGS = 
libobject_LIBS = 
libuuid_CFLAGS = 
libuuid_LIBS = 

幫助!

編輯:以下是完整的configure.ac文件:

AC_INIT([amblah], [1.0], [[email protected]]) 
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]) 
+1

當你直接運行'pkg-config'時,你會得到什麼輸出? –

+0

也許你正在以'PKG_CONFIG = true'的模式運行配置腳本。 (請注意,這有點兒咄咄逼人:PKG_CONFIG = true有效地禁用了PKG_CHECK_MODULES,並且需要用戶正確地分配LDFLAGS和CPPFLAGS。) –

+0

這對於那些只是缺少「AC_SUBST(XXX_CFLAGS)」和「AC_SUBST(XXX_LIBS)」庫? –

回答

1

衛生署!我看到了這個問題,這絕對是一個愚蠢的新問題。 AC_OUTPUT是什麼讓它吐出Makefile輸出等等。 GNU教程在這個事實上並不清楚,我在AC_OUTPUT下面放了一些行。因此,當AC_OUTPUT生成其輸出時,不會考慮這些行。通過將AC_OUTPUT移動到最後,它可以解決問題。