Autoconf检查程序,如果没有find则失败

我正在创build一个项目,并使用GNU Autoconf工具来进行configuration和制作。 我已经设置了所有的库检查和头文件检查,但似乎无法弄清楚如何检查系统上是否存在可执行文件,如果不存在,就会失败。

我试过了:

AC_CHECK_PROG(TEST,testprogram,testprogram,AC_MSG_ERROR(Cannot find testprogram.)) 

当我configure它运行并输出:

 Checking for testprogram... find: `testprogram. 15426 5 ': No such file or directory 

但不失败。

试试这个,我刚从我的一个项目中解脱出来,在路径中寻找一个叫做quantlib-config东西:

 # borrowed from a check for gnome in GNU gretl: def. a check for quantlib-config AC_DEFUN(AC_PROG_QUANTLIB, [AC_CHECK_PROG(QUANTLIB,quantlib-config,yes)]) AC_PROG_QUANTLIB if test x"${QUANTLIB}" == x"yes" ; then # use quantlib-config for QL settings [.... more stuff omitted here ...] else AC_MSG_ERROR([Please install QuantLib before trying to build RQuantLib.]) fi 

我发现这是最短的方法。

 AC_CHECK_PROG(FFMPEG_CHECK,ffmpeg,yes) if test x"$FFMPEG_CHECK" != x"yes" ; then AC_MSG_ERROR([Please install ffmpeg before installing.]) fi 

与上面类似,但是具有通过导出条件变量也能够与automake交互的优点

 AC_CHECK_PROG([ffmpeg],[ffmpeg],[yes],[no]) AM_CONDITIONAL([FOUND_FFMPEG], [test "x$ffmpeg" = xyes]) AM_COND_IF([FOUND_FFMPEG],,[AC_MSG_ERROR([required program 'ffmpeg' not found.])]) 

当使用AC_CHECK_PROG时,这是我运行过的最简洁的版本:

 AC_CHECK_PROG(BOGUS,[bogus],[bogus],[no]) test "$BOGUS" == "no" && AC_MSG_ERROR([Required program 'bogus' not found.]) 

当程序丢失时,将会产生这个输出:

 ./configure ...cut... checking for bogus... no configure: error: Required program 'bogus' not found. 

或者当与内置的autoconf程序检查结合使用时,请使用下面的代码:

 AC_PROG_YACC AC_PROG_LEX test "$YACC" == ":" && AC_MSG_ERROR([Required program 'bison' not found.]) test "$LEX" == ":" && AC_MSG_ERROR([Required program 'flex' not found.]) 

在寻找这个问题的时候偶尔碰到这个问题,我应该注意,如果你想让你的程序看起来像路径,那么运行时测试就足够了:

 if ! which programname >/dev/null ; then AC_MSG_ERROR([Missing programname] fi