【问题标题】:why automake fails to generate Makefile.in为什么 automake 无法生成 Makefile.in
【发布时间】:2011-07-20 05:16:00
【问题描述】:

尝试使用 automake/autoconf(分别为 1.10 和 2.61 版本)。一切正常,除了 automake 没有生成 Makefile.in。

产生了一些警告,但我认为它们并不重要。然而,最后一行让我觉得它正在产生不应该的东西并停在那里。项目中有md5.cc和md5.c文件。

xanadu:fsd wwilliam$ automake --add-missing
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:421: AC_USE_SYSTEM_EXTENSIONS is expanded from...
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/functions.m4:1677: AC_FUNC_STRNLEN is expanded from...
configure.ac:46: the top level
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_GNU_SOURCE
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:340: AC_GNU_SOURCE is expanded from...
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_GNU_SOURCE
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_AIX
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:455: AC_AIX is expanded from...
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_AIX
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_MINIX
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:474: AC_MINIX is expanded from...
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_MINIX
Makefile.am: object `md5.$(OBJEXT)' created by `md5.cc' and `md5.c'

configure.ac的相关内容:

AC_INIT(testapp, 1.1, user@blah.com)
AM_INIT_AUTOMAKE(testapp,1.1)
AC_OUTPUT(Makefile)

Makefile.am 的内容:

AUTOMAKE_OPTIONS = foreign

CFLAGS=-O2
bin_PROGRAMS = testapp
testapp_SOURCES = interface.cc interface.hh keymgr.cc keymgr.hh main.cc manage.cc manage.hh md5.c md5.cc md5.h mm.cc mm.hh mysqldb.cc mysqldb.h testapp.cc testapp.h

我一直在谷歌上搜索这个问题,但没有发现任何有用的信息。

运行的命令是:

autoscan
mv configure.scan configure.ac
(edit configure.ac)
autoconf
(edit Makefile.am)
aclocal
automake --add-missing

任何人以前见过这样的事情,或者知道如何打开一些额外的调试来解决问题?

【问题讨论】:

  • OT:您正在使用一种过时的方式调用AM_INIT_AUTOMAKE。现代用法是:AM_INIT_AUTOMAKE([1.11])。如果您正在使用选项(而不是在 Makefile.am 中设置选项,请这样称呼它:AM_INIT_AUTOMAKE([1.11 foreign -Wall -Werror])

标签: makefile autoconf automake


【解决方案1】:
Makefile.am: object `md5.$(OBJEXT)' created by `md5.cc' and `md5.c'

是导致 Automake 中止的错误消息。这两个文件必须编译为md5.o,所以这是个问题。

你能重命名这两个文件之一吗?

【讨论】:

  • 替代方案:如果它们属于不同的程序,设置特定于目标的CFLAGS 将导致automakefoo-md5.$(OBJEXT)bar-m5.$(OBJEXT) 生成规则。
  • 我认为这确实是答案。更仔细地查看该程序,我认为 md5.cc 文件实际上并不是必需的,并且可能已从目录中删除。然而,我最终选择使用 CMake 作为我的构建系统。感谢您的帮助。
【解决方案2】:

它在第 46 行抱怨,您没有提供给您的问题。
无论如何,要解决此问题,您必须在您的 configure.ac 中添加 AC_USE_SYSTEM_EXTENSIONS

示例:

AC_INIT(testapp, 1.1, user@blah.com)
AM_INIT_AUTOMAKE(testapp,1.1)
AC_OUTPUT(Makefile)
AC_USE_SYSTEM_EXTENSIONS
AC_PROG_C
...

【讨论】:

    【解决方案3】:

    我有一个使用 automake 配置的程序。该程序有一个脚本来进行设置,其中包括:

    aclocal -I config &&
    libtoolize --automake &&
    autoheader &&
    automake --foreign --add-missing &&
    autoconf
    

    在我看来,不同之处在于 autoconf 步骤是最后一步,而不是中间。

    【讨论】:

    • autoconfautomake 之间的顺序无关紧要,但您确实应该在aclocal 之前调用libtoolize。您可以将所有脚本替换为 autoreconf -vfi 以获得正确的顺序。只要确保在configure.ac 中使用AM_INIT_AUTOMAKE([foreign]),在Makefile.am 中使用ACLOCAL_AMFLAGS = -I config
    猜你喜欢
    • 2014-01-30
    • 2018-12-08
    • 2022-06-13
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2020-04-27
    相关资源
    最近更新 更多