2017-06-13 4 views
0

Je viens juste de commencer avec autotools et ai suivi A. tutoriel DURET-Lutz près d'obtenir un C bonjour travail mondial qui utilise GNU gettext.Comment ajouter des répertoires dans les chemins de recherche de bibliothèque pour autoconf

Le AM_CFLAGS et AM_LDFLAGS sont correctement définis dans le Makefile.am, et le code est compilé et exécuté avec succès. Le problème est que autoconf ne cherche pas dans les répertoires qu'AM_CFLAGS et AM_LDFLAGS demandent au compilateur de chercher, et par conséquent ne définit pas les macros HAVE_GETTEXT_H, HAVE_LIBINTL, etc. dans le fichier config.h.

Comment puis-je obtenir le configure.ac pour compléter la bibliothèque et inclure des répertoires qu'il recherche lors de l'utilisation AC_CHECK_LIB et AC_CHECK_HEADERS?

+0

Pouvez-vous donner un exemple? Ordinairement, un utilisateur utiliserait quelque chose comme './configure CFLAGS = -I/chemin/vers/gettext/include LDFLAGS = -L/chemin/vers/gettext/lib' pour les emplacements de bibliothèque non standard, et ceux-ci seraient utilisés par' '. AC_CHECK_HEADERS' et les macros 'AC_CHECK_LIB' si je me souviens bien. Voir [cette réponse] (https://stackoverflow.com/a/10210401/539810) par exemple. –

+0

@ChronoKitsune Je me rends compte que passer les variables d'environnement à configurer pourrait être la meilleure façon de le faire, mais j'espérais un moyen d'ajouter ces emplacements de bibliothèque non standard dans le code. – klmanion

Répondre

2

Je pense que j'ai mal lu la question initiale, mais puisque rien dans mon autre réponse est incorrecte en tant que tel, je vais ajouter une autre réponse.

Pour utiliser les chemins personnalisés dans AC_CHECK_HEADER et AC_CHECK_LIBS on a (temporairement) fixé CFLAGS et LDFLAGS en conséquence:

CFLAGS_backup="${CFLAGS}" 
LDFLAGS_backup="${LDFLAGS}" 
CFLAGS="-I/path/to/an/additional/include/ ${CFLAGS}" 
LDFLAGS="-L/path/to/the/lib/ ${LDFLAGS}" 

AC_CHECK_HEADER(...) 
AC_CHECK_LIB(...) 

## reset CFLAGS and LDFLAGS 
CFLAGS="${CFLAGS_backup}" 
LDFLAGS="${LDFLAGS_backup}" 

Dans AC_CHECK_* vous souhaitez généralement définir GETTEXT_CFLAGS ou LIBINTL_LIBS comme variables et de les exporter en automake par AC_SUBST([GETTEXT_CFLAGS]) et AC_SUBST([LIBINTL_LIBS]) respectivement. Vous ne pouvez malheureusement pas accéder à AM_CFLAGS ou AM_LDFLAGS dans configure.ac.

Maintenant en Makefile.am vous pouvez utiliser

AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff> 
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff> 

Pour plus de commodité, généralement, vous devriez exposer un paramètre à l'utilisateur ainsi, soit par AC_ARG_WITH ou AC_ARG_VAR, afin qu'ils puissent utiliser --with-gettext ou LIBINTL_LIBS=... avec le configurer la commande.

Voyant que autoconf est vraiment seulement m4 vous pouvez envelopper ci-dessus dans une macro vous. Et car nous parlons ici gettext, il y a déjà une telle chose: AM_GNU_GETTEXT, une macro m4 que vous pouvez utiliser dans votre configure.ac après avoir appelé gettextize.

1

Au lieu de AC_CHECK_HEADER, utilisez AC_CHECK_HEADERS, qui définit les jetons de la forme HAVE_<HEADER>_H. La forme singulière s'attend à ce que vous définissiez les choses vous-même en utilisant le ACTION-IF-FOUND (2ème argument).

Pour AC_CHECK_LIB il n'y a pas un tel confort, vous devez utiliser le ACTION-IF-FOUND (3ème argument) et AC_DEFINE tout ce qui est nécessaire.

De plus, il y aura des variables shell ac_cv_header_<HEADER>_h et ac_cv_lib_<LIBRARY>_<FUNCTION>.