2011-09-20 15 views
11

Tworzę projekt i używam narzędzi GNU Autoconf do konfiguracji i tworzenia. Skonfigurowałem wszystkie moje sprawdzanie bibliotek i sprawdzanie plików nagłówkowych, ale nie mogę się domyślić, jak sprawdzić, czy plik wykonywalny istnieje w systemie i czy nie istnieje, jeśli nie istnieje.Autoconf sprawdza program i zawiedzie jeśli nie zostanie znaleziony

Próbowałem:

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

Kiedy configure działa i wyjścia:

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

ale nie powiedzie się.

Odpowiedz

9

Spróbuj tego co jest, co właśnie podniósł z projektu kopalni, to wygląda na coś zwanego quantlib-config w ścieżce:

# 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 
+0

Dzięki za pomoc, użyłem go, aby stworzyć krótszą wersję, która pasuje do moich potrzeb. –

+0

Tak, oczywiście, że wygląda dobrze, jeśli potrzebujesz wsparcia, jeśli plik binarny nie zostanie znaleziony. –

20

Znalazłem to być najkrótsze podejście.

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

Podobny do powyższego, ale ma tę zaletę, że również jest w stanie interact with automake eksportując zmienną warunku

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.])]) 
0

Natknęliśmy się tutaj patrząc na ten problem, powinien pamiętać, że jeśli chcesz że program po prostu wyglądał w pathm test Runtime wystarczy:

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

Podczas korzystania AC_CHECK_PROG, jest to najbardziej zwięzły wersja, że ​​mam natknąć się:

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

Gdy program wynosi brakuje, to wyjście zostanie wygenerowany:

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

albo w połączeniu z wbudowanym w program sprawdza autoconf, użyj zamiast tego:

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.]) 
Powiązane problemy