Makefile pour GLUT

Taido

Membre confirmé
19 Janvier 2004
18
0
Bonjour

Je suis nouveau sur mac, ca ne fait pas une semaine que j'ai switché (super l'ibook G4 12"
smile.gif
), donc je ne connais pas encore très bien la plateforme.

Mon probleme est le suivant. j'ai du code en C à compiler, qui utilise la libraire OPENGL, et GLUT.
Quand je compile à partir de Xcode (en créant un nouveau projet, et en rajoutant les frameworks openGL, glut, et cacoa), pas de probleme, je vois bien mon résultat graphique.
Par contre, cela est long & fastidieux, car à chaque fois je dois créer un nouveau projet, et copier coller un de mes fichiers dans le main.c du projet ... s'il y a une solution plus simple, qui me permet de compiler directmeent mon code sans faire tout ça ...

Je pensais faire un makefile. En cherchant sur le net j'en ai trouvé un, mais il ne marche pas.

Le probleme c'est qu'il ne trouve pas les ficher gl.h, et glu.h
(le code a été écrit à partir de linux, je l'ai adapté en changeant les includes, cad en mettant GLUT/ ... au lieu de GL :
#include <GLUT/gl.h>
#include <GLUT/glu.h>
#include <GLUT/glut.h>


Mais avec mon makefile, il ne trouve pas les fichier gl.h et glu.h (alors qu'avec Xcode cela marche!!)
Quelqu'un peut m'aider ?
Peut etre est ce les include qui ne sont pas bon ?
(j'ai trouvé sur le net le fait qu'il fallait changer GL par GLUT) ...

Merci

Je joins le makefile, peut etre que cela vient de là ...

--------------------------------------

# makefile for simple glut programs on Mac OS X.

APP_NAME = osx_glut_program
CPP_FLAGS = -c
FRAMEWORKS = -framework OpenGL -framework GLUT -framework Foundation

$(APP_NAME): main.o
g++ main.o -o $(APP_NAME) $(FRAMEWORKS)

main.o: main.cpp
g++ $(CPP_FLAGS) main.cpp

explain:
@echo "APP_NAME == $(APP_NAME)"
@echo "CPP_FLAGS == $(CPP_FLAGS)"
@echo "FRAMEWORKS == $(FRAMEWORKS)"

clean:
rm -f $(APP_NAME)
rm -f *.o
 
Je ne connais pas la syntaxe exacte pour intégrer les frameworks dans la ligne de commande pour compiler, mais je pense que le problème vient de la ligne FRAMEWORKS = ...
Dans le cas extrême (et s'il n'y a pas beaucoup de fichiers à modifier), tu peux toujours modifier les include et y mettre le path complet pour accéder aux librairies se trouvant dans le framework OpenGL . Donc la syntaxe pour l'include sera qqch comme :

#include "le_path_vers_le_framework_opengl/gl.h"

++
 
A mon avis les includes ne sont pas bons, peut-être que si tu écris ce qui suit ça va marcher.

#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>

Car les headers gl.h et glu.h sont dans le framework OpenGL.framework
et glut.h est dans le framework GLUT.framework.

Les frameworks sont situés à l'emplacement habituel: /System/Library/Frameworks
 
Alors, j'ai essayé de changer les includes en mettant OpenGL/gl.h, ou le chemin (/System/Library/ ...) mais ni l'un ni l'autre n'a marché.

Je ne pense pas que cela vienne du code, étant donné que sous Xcode cela marche bien. Je pense plutot que cela vienne du makefile ...
La portabilité de mon code étant importante (il faut qu'il marche aussi sur un systeme Linux), j'aimerais ne pas avoir à changer les includes à chaque fois ...
enfin bon, déjà j'aimerais que ca marche ! :)
 
Pourrais-tu afficher les erreurs de compilation, ça pourrait aider...

Sinon, la variable $FRAMEWORK ne doit pas poser de problème

extrait du manuel ld(1):

-framework name[,suffix]
Specifies a framework to link against. Frameworks are dynamic
shared libraries, but they are stored in different locations,
and therefore must be searched for differently. When this option
is specified, ld searches for framework `name.framework/name'
first in any directories specified with the -F option, then in
the standard framework directories /Library/Frameworks, /Net-
work/Library/Frameworks, and /System/Library/Frameworks. The
placement of the -framework option is significant, as it deter-
mines when and how the framework is searched. If the optional
suffix is specified the framework is first searched for the name
with the suffix and then without.
 
donc quand je compile avec le makefile, il me fait la liste de toutes les fonctions qu'il ne connait pas (toutes les fonctions comme glBegin, glEnd, etc ...)

Sinon j'ai remarqué quelque chose. Les include gl.h et glu.h, dans Xcode ne sont pas necessaire ... ?!
car quand je les mets en commentaire, j'arrive quand même à compiler & voir mon rendu ...

enfin je n'y comprend plus rien
Comment vous faites vous pour compiler votre code opengl ?

Sinon, s'il y a une méthode pour qu'Xcode utilise toujours les bon frameworks, sans m'obliger à créer un nouveau projet, à copier coller mon code dans le fichier main.c du nouveau projet, et de choisir les frameworks ...
car toutes ces manipulations prennent du temps ...

Je vous remercie pour votre aide !
 
Si ça marche avec Xcode, tu peux toujours compiler en ligne de commande avec xcodebuild, si ça peut aider...
<font class="small">Code:</font><hr /><pre>
Usage: xcodebuild [-project &lt;projectname&gt;] [-activetarget] [-alltargets] [-target &lt;targetname&gt;]... [-activebuildstyle] [-buildstyle &lt;buildstylename&gt;] [-optionalbuildstyle &lt;buildstylename&gt;] [&lt;buildsetting&gt;=&lt;value&gt;]... [&lt;buildaction&gt;]...
xcodebuild [-list]
</pre><hr />