【问题标题】:Makefile.am seems to ignore AM_LDLIBSMakefile.am 似乎忽略了 AM_LDLIBS
【发布时间】:2012-08-22 21:32:10
【问题描述】:

我目前正在努力理解自动工具。我快到了,但是当涉及到 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 宏,我的配置脚本会导致包含这些库。

  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_CFLAGSAM_CPPFLAGS。该路径特定于用户构建包的机器,因此在任何自动工具元文件中都没有位置。

标签: autotools autoconf automake


【解决方案1】:

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

【讨论】:

  • LDFLAGS 是正确的。至于为什么在您使用 AC_CHECK_LIB 时包含您的库:通常,如果您不打算链接它,您就不会检查库。在此处阅读其功能的完整描述:gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/…
  • 如果 Automake 遵循Make conventions 并使用AM_LDLIBS,那么在使用链接器选项-Wl,-R,/usr/local/lib64 -Wl,--enable-new-dtags*.pc 文件可能不会被破坏。 Autotools 不应该告诉人们链接到像 -R,/usr/local/lib64 这样的库...
猜你喜欢
  • 2021-10-28
  • 2016-09-30
  • 2016-03-16
  • 2014-02-03
  • 2012-03-11
  • 2013-09-07
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多