发现自动错误'./ltmain.sh'

时间:2014-03-24 07:17:25

标签: c autotools automake mingw32 libtool

我使用mingw-get-setup.exe安装了mingw和msys。我还在[{1}}中安装了Autotools(autoconf,automake,m4,libtool)。

当我运行automake时,总会发生以下错误:

C:\/opt/autotools

如果我从libtool的已安装树中复制configure.ac:11: error: required file './ltmain.sh' not found ,执行将正常完成。

如何在不复制的情况下将automake配置为查找ltmain.sh

2 个答案:

答案 0 :(得分:49)

autoconf / automake / libtool项目中,您必须调用:

  • libtoolize:这会复制/链接一些支持脚本,包括ltmain.sh(这是libtool的主要组件)。
  • aclocal:这会查找配置脚本需要的所有m4宏,并制作本地副本以便于访问。
  • autoheader:可选,如果您想使用config.h / AC_CONFIG_HEADERS,则在调用编译器时将会内联所有测试结果宏。
  • autoconf:将configure.ac使用的所有宏扩展到configure脚本中。
  • automake:将所有Makefile.am转换为Makefile.in模板。您可能希望使用--add-missing调用此功能,以便可以将其他支持脚本链接/复制到您的项目中(例如compilemissingdepcomptest-driver等等)。

您很可能希望在每个项目中添加bootstrap脚本,按此顺序调用所有这些工具。或者你可能很懒,只需调用autoreconf -i,看看它是否适用于你的项目。

在配置脚本生成Makefile之后(和之后),autotools会自行处理;也就是说,如果您修改configure.ac或任何Makefile.am,只需运行make,即可再次调用上述正确的工具以保持所有内容的更新。请注意不要在Makefile.am文件中创建语法错误,否则最终可能会导致Makefile损坏,导致make拒绝运行 - 在这种情况下您必须运行bootstrap)手动。

修改

automake manual说了这个关于aclocal:

  

autoreconf预计会消失。

进一步向下:

  

从用户的角度来看,aclocal的删除可能会让您感到痛苦。您可以采取一种简单的预防措施,使交换机更加无缝:永远不要自己调用aclocal 。让这个人完全由aclocal和Automake的重建规则控制。

所以你有它:使用autoreconf来证明未来,除非你有充分的理由直接使用这些工具。

答案 1 :(得分:0)

正如 DanielKO 所说,ltmain.sh 是由 libtoolize 创建的。

但是,如果没有呢?

需要满足以下要求:

  1. configure.ac 必须存在并且至少包含以下之一: AM_PROG_LIBTOOL、AC_PROG_LIBTOOL、LT_INIT (参见 /usr/bin/libtoolize 中的函数 func_require_seen_libtool

  2. 如果 configure.ac 不包含 AC_CONFIG_AUX_DIR,libtoolize 将在 ... 中查找名为“install-sh”或“install.sh”的文件和 ../..,如果发现将其用作“auxdir”并在那里安装 ltmain.sh(请参阅 libtoolize 中的函数 func_require_aux_dir)。

就我而言,我正在另一个项目的子目录中处理“示例项目”,并且示例项目的 configure.ac 中没有 AC_CONFIG_AUX_DIR;因此 libtoolize 找到了父项目的根目录并将 ltmain.sh 安装在那里而不是示例项目的根目录中。