Autoconf проверяет программу и сбой, если не найден

Я создаю проект и использую инструменты GNU Autoconf для настройки и создания. Я установил всю проверку библиотеки и проверку файлов заголовков, но не могу понять, как проверить, существует ли исполняемый файл в системе и сбой, если он не существует.

Я пробовал:

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

но не прерывается.

Ответ 1

Попробуйте это, что я только что снял с моего проекта, он ищет что-то под названием 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

Ответ 2

Я нашел, что это самый короткий подход.

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

Ответ 3

Как и выше, но имеет то преимущество, что взаимодействует с 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.])])

Ответ 4

При использовании 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.])

Ответ 5

Наткнувшись на эту проблему, я должен заметить, что если вы хотите, чтобы ваша программа просто просматривалась в pathm, достаточно проверить время выполнения:

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