1

私は現在、autotoolsの理解に取り組んでいます。私はもうすぐそこにいますがAM_CFLAGSAM_LDLIBSマクロに関しては、automakeの動作に少し困惑しています。

以下は私の非常に短い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を実行した後は、指定しmake allたものを使用していないことは明らかです。CFLAGSLDLIBS

AC_CHECK_LIB(とにかく)さらに奇妙なのは、マクロを使用した場合に、configureスクリプトによってこれらのライブラリが含まれる可能性があることです。

  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のスレッドにぶら下がっているような気がします。私の現実を爆発させて、私のやり方の誤りを見せてください。

御時間ありがとうございます!

4

1 に答える 1

2

私自身の質問に答えると、Makefile.amに間違った変数があると思います。AM_LDLIBSが存在しないようです-AM_LDFLAGSを使用する必要がありますが、AC_CHECK_LIBマクロを使用したときに./configureによってライブラリがリンクされる理由はまだわかりません。

于 2012-08-22T21:43:25.970 に答える