[Projet la relance] 13 Compiler et faire des builds crossplatform

SEB Message lu Posté le 06 Août 2011 à 12:48 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Ce sujet vient plus ou moins en complément du sujet sur l'organisation du repository, il s'agit de savoir comment nous compilerons le projet.

Je pense que sur ce sujet il n'y aura pas grand débat mais cela fera au moins office de tuto/doc pour ceux qui ne connaissent pas trop ces aspects.


Pour compiler un projet il existe deux méthodes de bases classiques : utiliser la ligne de commande ou vôtre IDE favori (je ne citerais que les Codeblocks, Visual studio, Eclipse (et oui pour du c++ aussi) et tout autre ide..)


Disons que en principe la ligne de commande sur un projet de l'ampleur d'un jeu (même petit) est à oublier immédiatement, en fait on peut tout de suite la remplacer par les Makefiles. Donc les deux options sont : IDE/Makefiles.

Etudions d'abord le cas de l'IDE : l'ide permet en général de créer un espace de travail puis N projet à l'intérieur. Il faut alors ensuite utiliser l'ide pour intégrer les différents fichiers et créer les différentes configurations ce qui peut être fastidieux mais disons que lorsque cela a été fait une fois ce n'est plus a faire. Le problème ? comme chacun aura sa copie locale du repository il faudrait dans l'idéal que l'espace de travail et les projet soit partagés pour que chacun n'ai pas à faire ce même processus de son coté. De plus si chacun a un ide différent ca sera encore plus problématique, surtout que les dossier d'includes et de libs pourraient etre différentes d'une personne à l'autre.
Il y a donc pas mal d'inconvénients avec les projets d'IDE.

Etudions maintenant le cas du Makefile : le makefile permet plus ou moins de décrire le processus de construction en regrouppant dans un ou plusieur fichiers les directives en lignes de commandes qui devraient etre tapées. L'avantage est que étant un simple fichier il est simple à partager, inconvénient il peut devenir également assez fastidieux à écrire et surtout c'est assez complexe de le rendre 'portable' rien que d'un compilateur à l'autre. Et ils sont bien austère comparé à un ide.
Les Makefiles posent donc également une série de problèmes non négligeable.


La solution de 'générateur de projet' et plus particulièrement mon favoris 'CMake'.

Cmake est un outil très intéressant cross plateforme dont le principe est simple : Il faut écrire quelques fichiers du type 'makefile à la sauce Cmake' que le logiciel va parser pour ensuite générer ... eh bien en fait presque tout ce que vous pouvez souhaiter. Il est capable de générer aussi bien des makefiles que des projets et espace de travail complets, avec les configurations bien placées à chaque endroit spécifique à la machine ou il a été exécuté, et adapté au compilateur cible.
La seule chose a faire avec cmake ? spécifier sa configuration, l'exécuter... et profiter du joli projet tout neuf qui a été généré !!

Apres avoir fait l'apologie de ce système. J'attend également votre avis mais j'espère vous avoir convaincu.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Daru13 Message lu Posté le 06 Août 2011 à 14:23 Bulle
Avatar de Daru13
Membre Elite

Messages : 2884
GCPoints : 108090
Je n'y connais pas grand chose (merci pour les explications d'ailleurs ^^), et étant un membre un peu volatile face à ce projet, mon avis n'est pas des plus important ici, mais ta dernière solution semble bien, du moins la plus simple :smile:.
Mais pourquoi ne pas, sinon, simplement choisir une ou deux personnes bien présentes pour chaque OS sur lequel le projet devra être compilé ?
Pour peu qu'ils configurent une fois leur IDE ou autre (il faut de tout façon également configurer Cmake une fois aussi, apparemment), ça reviendra un peu au même, non (ou alors je n'ai rien compris :p).
SEB Message lu Posté le 06 Août 2011 à 14:34 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Oui c'est sur que l'on peut désigner plusieurs personne 'responsable' de chaque plateforme et ce sera nécessaire pour la création des fichiers cmake. Mais une fois ces fichiers créés nimporte quel nouveau participant n'aura quasiment rien a faire pour pouvoir compiler le projet (rien de plus que télécharger cmake, créer son micro fichier de config, le laisser générer le projet)

Je suis d'accord que ca revient un peu au même. Dans la pratique c'est surtout que ca a tendance malgré tout à prendre beaucoup plus de temps de maintenir des projet pour des ide que de les faire générer selon des rêgles bien homogènes, uniformes et centralisées.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
freemaul Message lu Posté le 06 Août 2011 à 15:51 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Je n'ai jamais utilisé Cmake mais le concept me plait beaucoup. Il est compatible avec beaucoup d'IDE ?
"La vie n'a pas de prix, mais elle coûte chère"
SEB Message lu Posté le 06 Août 2011 à 16:02 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Beaucoup je ne sais pas exactement en tout cas sous windows il fait au moins Codeblocks, Mingw makefiles, Visual studio 2005, 2008, 2010.
Sous linux il fait Codeblocks, gcc makefiles et sous Mac il fait les projet Xcode également.

Apres il y a une liste beaucoup plus large que ca mais je n'ai pas pri le temps de tout étudier.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
freemaul Message lu Posté le 06 Août 2011 à 16:08 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
OK, je croyait que la liste était beaucoup plus petite, genre : Visual studio pour Windows et Makefiles pour Linux.
Donc apparemment tout le monde peut y trouver son compte avec cette solution.
"La vie n'a pas de prix, mais elle coûte chère"
Darktib Message lu Posté le 06 Août 2011 à 20:35 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Je suis pour CMake.
Par contre, dans ce cas, je serais pour séparer la liste des fichiers à compiler du reste de la config avec un include (ainsi la config reste plus lisible). Dans ce fichier sera précisé l'organisation des sources ("source_group").
SEB Message lu Posté le 07 Août 2011 à 10:50 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Je ne connaissais pas les source_group dans cmake dans ce cas effectivement je suis pour laisser tout en vrac dans le repository src.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 08 Août 2011 à 10:07 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Idem ici ?

CMake validé?

ca a l'air mais bon...
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0357 secondes