2012-08-22 71 views
0

我目前正在努力了解autotools。我几乎在那里,但是当涉及到AM_CFLAGSAM_LDLIBS宏时,我对automake的行为感到困惑。Makefile.am似乎忽略AM_LDLIBS

下面是我非常短Makefile.am

1 bin_PROGRAMS = sqlmigrate 
    2 sqlmigrate_SOURCES = sqlmigrate.c db.c 
    3 
    4 AM_CFLAGS=-g -Wall -D_LARGEFILE64_SOURCE=1 -I/usr/local/apr/include/apr-1 
    5 AM_LDLIBS=-lsqlite3 -lapr-1 

我的理解是,当没有相应的参数传递给./configureAM_CFLAGSAM_LDLIBS被使用,但是,鉴于当他们屈服于这种论点。

创建Makefile.in并运行configure后,make all显然没有使用指定的CFLAGSLDLIBS,即使我指定了它们。

更奇怪(我反正),是我的配置脚本可以导致包含这些库,如果我碰巧使用了AC_CHECK_LIB宏。因此,与注释掉AC_CHECK_LIB线

1 #            -*- Autoconf -*- 
    2 # Process this file with autoconf to produce a configure script. 
    3 
    4 AC_PREREQ([2.68]) 
    5 AC_INIT([sqlmigrate], [1.0], []) 
    6 AM_INIT_AUTOMAKE(1.8) 
    7 AC_CONFIG_SRCDIR([sqlmigrate.c]) 
    8 
    9 # Checks for programs. 
10 AC_PROG_CC 
11 AC_PROG_INSTALL 
12 
13 # Checks for libraries. 
14 # AC_CHECK_LIB([sqlite3], [sqlite3_open]) 
15 # AC_CHECK_LIB([apr-1], [apr_pool_initialize]) 
16 
17 # Checks for header files. 
18 AC_CHECK_HEADERS([stdlib.h string.h unistd.h]) 
19 
20 # Checks for typedefs, structures, and compiler characteristics. 
21 
22 # Checks for library functions. 
23 
24 AC_CONFIG_HEADER(config.h) 
25 AC_CONFIG_FILES([Makefile]) 
26 AC_OUTPUT 

gcc调用时没有链接库。

我觉得我在这里挂着autotools的线程。随时爆发我的现实,并告诉我我的方式的错误。

谢谢你的时间!

+0

'-I/usr/local/apr/include/apr-1'不属于'AM_CFLAGS'或'AM_CPPFLAGS'。该路径特定于用户构建包的机器,因此在任何autotool元文件中都没有位置。 –

回答

1

回答我自己的问题,我想我的Makefile.am中只有错误的变量。 AM_LDLIBS似乎不存在 - 我应该使用AM_LDFLAGS,但我仍然不明白为什么./configure会导致库在我使用AC_CHECK_LIB宏时被链接。

+1

'LDFLAGS'是正确的。至于为什么当你使用'AC_CHECK_LIB'时你的库被包含在内:通常,如果你不打算链接它,你将不会检查一个库。请阅读它的完整说明:http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Libraries.html – ptomato