aclocal.m4 不是由 aclocal 生成的

aclocal.m4 not generated by aclocal

简介

我正在尝试制作一个基本的 autotools 项目。我正在改编本教程:
https://crypto.bi/autotools/

我有所有需要的文件(我认为)和 运行 aclocal --verbose 并且我得到了很多输出,其中大部分可能没有多大用处,保存一行我认为是相关:

...
aclocal: found macro AM_INIT_AUTOMAKE in /usr/share/aclocal-1.13/init.m4: 23
...

这个程序完成后,没有创建任何aclocal.m4,据我了解,应该有。

详情

在运行宁aclocal之后,如果我运行automake --add-missing,我得到以下错误:

configure.ac: error: no proper invocation of AM_INIT_AUTOMAKE was found.
configure.ac: You should verify that configure.ac invokes AM_INIT_AUTOMAKE,
configure.ac: that aclocal.m4 is present in the top-level directory,
configure.ac: and that aclocal.m4 was recently regenerated (using aclocal)
automake: error: no 'Makefile.am' found for any configure output
automake: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?

文件

我有以下configure.ac

AC_INIT([YOURPROJECT], [1.0])
AC_CONFIG_SRCDIR([.])
AC_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIRS([m4])
AC_PREREQ([2.69])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
AC_CHECK_HEADERS([stdlib.h])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

以及以下 Makefile.am

AM_LDFLAGS=
AM_CPPFLAGS=
ACLOCAL_AMFLAGS=-I m4
bin_PROGRAMS=main
main_SOURCES=main.c
main_LDADD=

问题

如何生成 aclocal.m4 文件?

将您的 configure.ac 重写为有可能工作的东西:

AC_PREREQ([2.69])
AC_INIT([YOURPROJECT], [1.0])
AC_CONFIG_SRCDIR([my-main.c])
AC_CONFIG_MACRO_DIRS([m4])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([])

AC_PROG_CC
AC_CHECK_HEADERS([stdlib.h])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

主要变化:

  • AM_INIT_AUTOMAKE 不是以 AC_ 开头。找不到 AM_INIT_AUTOMAKE 正是您的 automake 错误消息所抱怨的。所以这应该可以生成一个 aclocal.m4 文件。

其他更改:

  • AC_PREREQ 应该在第一行。
  • AC_CONFIG_SRCDIR 使用实际的源文件。

此外,只需调用 autoreconf 一次,让它负责按顺序调用哪些工具(aclocal、automake、autoconf、autoheader 以及其他任何工具)。