Question
Je construis mon premier paquet géré autoconf.
Cependant, je ne peux pas trouver des exemples simples partout de la façon de spécifier une bibliothèque nécessaire, et trouver cette bibliothèque où il pourrait être dans divers endroits différents.
Je suis actuellement obtenu:
AC_CHECK_LIB(['event'], ['event_init'])
:
- Il ne trouve pas la version installée dans
/opt/local/lib
- Il ne se plaint pas si la bibliothèque est pas réellement trouvé
- Je dois définir le chemin d'inclusion de trop
/opt/local/include
toute aide ou des liens vers des tutoriels décents beaucoup apprécié ...
La solution
Vous devez définir manuellement CFLAGS
, et CXXFLAGS
si vous voulez LDFLAGS
gcc / g ++ regarder dans des endroits non standard.
Alors, avant d'appeler AC_CHECK_LIB()
, faire quelque chose comme
CFLAGS="$CFLAGS -I/opt/local/include"
CXXFLAGS="$CXXFLAGS -I/opt/local/include"
LDFLAGS="$LDFLAGS -L/opt/local/lib"
Vous n'avez pas besoin CXXFLAGS si vous n'utilisez gcc au long de votre script de configuration.
Autres conseils
script autoconf ne peut pas deviner l'emplacement de la bibliothèque « en option », qui peuvent varier d'une plate-forme à l'autre. Ainsi, vous pouvez dire
CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" ./configure
Pour que vous devez AC_CHECK_LIB()
préciser la condition ne parviennent pas explicitement dans "l'action si-faux" argument:
dnl This is simply print "no" and continue:
AC_CHECK_LIB([m], [sqrt123])
dnl This will stop:
AC_CHECK_LIB([m], [sqrt123], [], [AC_MSG_ERROR([sqrt123 was not found in libm])])
Sortie:
checking for sqrt123 in -lm... no
checking for sqrt123 in -lm... no
configure: error: sqrt123 was not found in libm
<=> ne manque pas par défaut sur des raisons évidentes: on peut vérifier plusieurs bibliothèques différentes qui offrent des fonctionnalités similaires et choisissez un d'entre eux:)
Je sais que c'est un vieux fil, mais je suppose que cela peut aider certaines personnes à. Voici comment je trouve des choses.
hdff="no"
hdffprefix="ERROR"
AC_ARG_WITH(hdf,[ --with-hdf Compile with hdf library, for output.],[hdffprefix=$withval hdff="yes"],[])
# if there is no value given, it appears tha hdffprefix is set to "yes"
if test $hdffprefix = "yes" -a $hdff = "yes"
then
echo "HDF: Attempting to find HDF"
hdffprefix="ERROR"
# check if hdffprefix is set, if it is not, it sets it to "ERROR" and the
# 'if' comparison evaluates to true
if [[ "$hdffprefix" == "ERROR" ]]
then
echo "HDF: hdffprefix not set, searching PATH"
for i in `echo $PATH | tr ':' '\n'`
do
if [[ $i == *hdf* ]]
then
if [[ $i == *bin/* ]]
then
hdffprefix=${i%bin/}
# if it doesn't exist, re-set to ERROR
if [[ ! -f ${hdffprefix}include/hdf.h ]]
then
hdffprefix="ERROR"
fi
elif [[ $i == *bin* ]]
then
hdffprefix=${i%bin}
# if it doesn't exist, re-set to ERROR
if [[ ! -f ${hdffprefix}include/hdf.h ]]
then
hdffprefix="ERROR"
fi
fi
fi
done
if [[ "$hdffprefix" == "ERROR" ]]
then
echo "HDF: hdffprefix not found in PATH, trying 'which'"
WHICH_TEST_HDF=`which hdf2gif`
if [[ WHICH_TEST_HDF != "" ]]
then
hdffprefix=${WHICH_TEST_HDF%bin/hdf2gif}
else
echo "HDF: Warning - hdf not found"
fi
fi
fi
if [[ "$hdffprefix" != "ERROR" ]]
then
hdff="yes"
echo "HDF found: $hdffprefix"
fi
fi
if test $hdff = 'yes'; then
hdfincs=" -DUSE_HDF -I"${hdffprefix}"include"
scriptotherlibsinc=${scriptotherlibsinc}" -L"${hdffprefix}"/lib"
scriptotherlibs=${scriptotherlibs}" -lmfhdf -ldf -ljpeg -lz"
AC_CHECK_HEADERS([${hdffprefix}/include/hdf.h],,[AC_MSG_ERROR([Cannot find hdf.h])])
AC_CHECK_HEADERS([${hdffprefix}/include/mfhdf.h],,[AC_MSG_ERROR([Cannot find mfhdf.h])])
fi
Voici comment faire:
# We need the math library for some tests.
AC_CHECK_LIB([m], [floor], [],
[AC_MSG_ERROR([Can't find or link to the math library.])])
Notez qu'il ne l'erreur pas automatiquement lorsque la bibliothèque ne se trouve pas, vous devez appelé AC_MSG_ERROR () comme dans le code ci-dessus.
Vous voulez autoconf de configuration pour trouver ces répertoires automatiquement et codelogic donne la réponse; mais supposons que vous ne voulez pas y chercher sur tous les systèmes, que sur un Mac. Vous pouvez ajouter ce qui suit
AC_CANONICAL_HOST
case $host_os in
darwin* )
CFLAGS="$CFLAGS -I/opt/local/include"
CXXFLAGS="$CXXFLAGS -I/opt/local/include"
LDFLAGS="$LDFLAGS -L/opt/local/lib"
;;
esac
Notez que je l'ai ajouté comme un arbre de cas afin que vous puissiez ajouter des choses pour une variété de systèmes d'exploitation plus tard (comme Linux * et BSD ).
Si vous arrive d'utiliser ou GCC
CLANG
, la manière standard est d'avoir la variable d'environnement avec le chemin CPLUS_INCLUDE_PATH
de la non-officielle inclut fichiers et LIBRARY_PATH
pour les bibliothèques. Rappelez que vous n'avez pas à changer quoi que ce soit dans le configure.ac. Ainsi, vous pouvez simplement appeler la configuration de cette façon:
$ export CPLUS_INCLUDE_PATH=/opt/local/include
$ export LIBRARY_PATH=/opt/local/lib
$ ./configure
Les variables standard de fait
Variable | lang | Usage
-------------------|------|---------
C_INCLUDE_PATH | C | colon separated list of include directory paths
CPLUS_INCLUDE_PATH | C++ | colon separated list of include directory paths
LIBRARY_PATH | C/C++| colon separated compiling time static linking dirs
LD_RUN_PATH | C/C++| colon separated compiling time dynamic linking dirs
LD_LIBRARY_PATH | C/C++| colon separated run-time dynamic linking dirs
CPPFLAGS | C/C++| prepocessor flags
CFLAGS | C | Compiling flags
CXXFLAGS | C++ | Compiling flags
LDFLAGS | C++ | Linking flags
NOTE Vous pouvez utiliser ou CPPFLAGS
LDFLAGS
, cependant, CPPFLAGS/LDFLAGS
/ *_PATH
correspond exactement à vos besoins. Pour les drapeaux sont PATHs
qui peuvent être beaucoup de choses, mais sont pour CFLAGS
<=>
La portabilité Note: Bien que cela fonctionnera sur de nombreux compilateurs modernes, tous les compilateurs respecteront ces variables. Certains compilateurs croisés seront purement et simplement ignorer ou de les remplacer, ce qui oblige à une recourir à des modifications <=> et comme mentionné <=> dans d'autres réponses.
SOURCE pusse downvotes ici être à cause du manque de sources dans ma réponse. Voici pour en <=> GCC : https: //gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html