2012-08-22 2 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 

나의 이해는 AM_CFLAGSAM_LDLIBS 주어진 때이 같은 주장에 굴복한다는 해당 인수가 ./configure에 전달되지 않을 때 사용되지만이다.

그러나 Makefile.in을 만들고 configure를 실행 한 후에 은 분명히 지정한 CFLAGSLDLIBS을 사용하고 있지 않습니다.

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 

그래서 밖으로 댓글을 달았 AC_CHECK_LIB 라인, 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