我使用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
?
答案 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
调用此功能,以便可以将其他支持脚本链接/复制到您的项目中(例如compile
,missing
,depcomp
,test-driver
等等)。您很可能希望在每个项目中添加bootstrap
脚本,按此顺序调用所有这些工具。或者你可能很懒,只需调用autoreconf -i
,看看它是否适用于你的项目。
在配置脚本生成Makefile
之后(和之后),autotools会自行处理;也就是说,如果您修改configure.ac
或任何Makefile.am
,只需运行make
,即可再次调用上述正确的工具以保持所有内容的更新。请注意不要在Makefile.am
文件中创建语法错误,否则最终可能会导致Makefile
损坏,导致make
拒绝运行 - 在这种情况下您必须运行1}}脚本(或bootstrap
)手动。
修改强>
automake manual说了这个关于aclocal:
autoreconf
预计会消失。
进一步向下:
从用户的角度来看,
aclocal
的删除可能会让您感到痛苦。您可以采取一种简单的预防措施,使交换机更加无缝:永远不要自己调用aclocal 。让这个人完全由aclocal
和Automake的重建规则控制。
所以你有它:使用autoreconf
来证明未来,除非你有充分的理由直接使用这些工具。
答案 1 :(得分:0)
正如 DanielKO 所说,ltmain.sh
是由 libtoolize
创建的。
但是,如果没有呢?
需要满足以下要求:
configure.ac 必须存在并且至少包含以下之一:
AM_PROG_LIBTOOL、AC_PROG_LIBTOOL、LT_INIT
(参见 /usr/bin/libtoolize 中的函数 func_require_seen_libtool
)
如果 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 安装在那里而不是示例项目的根目录中。