2010-09-22 17 views
1

Je veux utiliser freeglut pour mon projet.Comment écrire configure.ac et Makefile.am pour freeglut?

Dans mon configure.ac ça ressemble à ça, ça a fonctionné comme ça pour SDL alors j'ai juste remplacé quelques potions et j'ai espéré que ça marche aussi pour freeglut mais ce n'est pas le cas. Alors qu'est-ce que je fais mal?

# Check for freeglut 
PKG_CHECK_MODULES([FREEGLUT], [freeglut >= 3.0]) 
AC_SUBST(FREEGLUT_CFLAGS) 
AC_SUBST(FREEGLUT_LIBS) 

De même que dois-je écrire dans Makefile.am? Pour SDL, il ressemble à ceci:

+0

Avez-vous besoin de FreeGLUT ou d'un GLUT? – genpfault

Répondre

1

Pkg-config est un programme qui recherche les drapeaux du compilateur nécessaires et des drapeaux de l'éditeur de liens pour une bibliothèque. PKG_CHECK_MODULES([NAME], [libraries]) est une macro autoconf qui recherche les indicateurs pour libraries et les met dans deux variables, NAME_CFLAGS et NAME_LIBS. Toutes les bibliothèques ne le supportent pas. Pour prendre en charge pkg-config, les bibliothèques doivent installer un fichier .pc.

En regardant freeglut's source code, il semble qu'il n'y en a pas, alors je conclus qu'il ne supporte pas pkg-config. Ce que vous devriez faire quand une bibliothèque ne supporte pas pkg-config, c'est de regarder its documentation pour voir si elle mentionne les drapeaux du compilateur et les indicateurs de liens que vous devriez utiliser. Je ne trouve aucune mention de cela nulle part. Comme cela échoue, la meilleure chose à faire est de supposer que la bibliothèque n'a pas besoin de drapeaux de compilateur supplémentaires, et seulement un drapeau de liaison: -l<name>, dans ce cas -lfreeglut. Vous pouvez également utiliser une macro autoconf pour vérifier cela automatiquement. Vous pouvez ajouter à votre configure.ac comme ceci:

AC_CHECK_LIB([freeglut], [glutInit]) 

Cela ajoutera automatiquement -lfreeglut-LIBS si la bibliothèque freeglut est présent, de sorte que vous ne devriez pas avoir à écrire quelque chose de plus dans votre Makefile.am.

2

Correction/ajouter à la réponse de ptomato:

court: en freeglut réalité est rassasiement, donc faire:

AC_CHECK_LIB([glut], [glutInit]) 

Explication: freeglut est un remplacement pour les anciennes implantations/unfree de l'utilitaire OpenGL Toolkit (SURABONDANCE). Dans les distributions d'aujourd'hui, freeglut est installé en remplacement de ces installations GLUT anciennes/non libres. Ceci est fait en définissant l'option de configuration --enable-replace-glut de freeglut. En conséquence, la bibliothèque est appelée libglut au lieu de libfreeglut. Jetez un oeil par exemple au Ubuntu's freeglut package; il contient /usr/lib/libglut.so.3. Et pour prendre en charge les anciennes distributions, qui installent freeglut comme libfreeglut au lieu de libglut, vous devrez également vérifier cela.

0
dnl Check for GLUT 
GLUT_CFLAGS="" 
GLUT_LIBS=-lglut 
glut_enabled=yes 
AC_ARG_WITH([glut], 
    [AS_HELP_STRING([--with-glut=DIR], 
      [glut install directory])], 
    [GLUT_CFLAGS="-I$withval/include" 
    GLUT_LIBS="-L$withval/lib -lglut"]) 
AC_CHECK_HEADER([GL/glut.h], 
     [], 
     [glut_enabled=no]) 
AC_CHECK_LIB([glut], 
     [glutInit], 
     [], 
     [glut_enabled=no]) 
+0

Merci d'avoir posté une réponse! Alors qu'un extrait de code pourrait répondre à la question, il est toujours bon d'ajouter des informations complémentaires, comme expliquer, etc. – j0k