我有两个autotools项目可以自行运行:
p1不构建任何库也不使用C ++,并且意图由用户编译。所以我这里没有libtoolize也没有LT_INIT。
p2创建了一个只在开发中使用的小型C ++库,这里我有LT_INIT并调用libtoolize。
但是当我将p2目录放在p1中时,在p2目录中运行automake会发现它位于autotools项目的子目录中,我收到错误
configure.ac:31: required file `../ltmain.sh' not found
我尝试添加
AC_CONFIG_AUX_DIR([.])
到p2的configure.ac,但是configure中的ac_aux_dir变量为空,我收到错误
configure: error: cannot run /bin/sh /config.sub
(configure中的行尝试运行$ax_aux_dir/config.sub
)
是否有一种干净的方法可以在autotools项目中使用不相关的autotools项目,或者我应该放弃?
答案 0 :(得分:3)
我在询问后两分钟想出来,这是多么典型。显然,configure.ac必须具有:
AC_INIT(…)
AC_CONFIG_AUX_DIR([.])
AM_INIT_AUTOMAKE(…)
而不是:
AC_CONFIG_AUX_DIR([.])
AC_INIT(…)
AM_INIT_AUTOMAKE(…)
就像我一样(如果AUX_DIR
在AM_INIT_AUTOMAKE
之后,它会给出错误消息,这让我相信它必须在AC_INIT
之后。
无论如何,这有效:)
答案 1 :(得分:2)
在p1的configure.ac中,您可以写:
AC_CONFIG_SUBDIRS(p2)
对AC_CONFIG_SUBDIRS
的调用将导致p2被视为p1的子项目,具有自己的configure.ac等,所有内容都“自动工作”(希望如此)。还有complete small example in the autoconf manual