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