【发布时间】:2012-08-22 21:32:10
【问题描述】:
我目前正在努力理解自动工具。我快到了,但是当涉及到 AM_CFLAGS 和 AM_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_CFLAGS 和AM_LDLIBS 在没有相应参数传递给./configure 时使用,但在给定时它们会屈服于此类参数。
然而,在创建 Makefile.in 并运行 configure 之后,make all 显然没有使用指定的 CFLAGS 和 LDLIBS,即使我指定了它们。
更奇怪的是(无论如何对我来说),如果我碰巧使用 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 被调用而不链接库。
我觉得我在这里被自动工具的线程挂住了。随意炸毁我的现实,向我展示我的方式的错误。
感谢您的宝贵时间!
【问题讨论】:
-
-I/usr/local/apr/include/apr-1之类的内容不属于AM_CFLAGS或AM_CPPFLAGS。该路径特定于用户构建包的机器,因此在任何自动工具元文件中都没有位置。
标签: autotools autoconf automake