l'absence de plate-forme unifiée (make de VC++, make GNU via MinGW, scons etc...)
Pour bien comprendre, à la base il y a les Makefile bas niveau format GNU ou VC++ qui sont donc dépendant d'une plateforme/compilateur.
SCons, CMake, Waf, QMake... sont des systèmes de compilation haut niveau multiplateforme. CMake et QMake par exemple génèrent des Makefiles au format GNU et VC++ alors que SCons et Waf reimplementent tout en Python.
La première étape est donc d'utiliser un système de compilation multiplateforme. Mon préféré est CMake (SCons est beaucoup trop lent et j'ai jamais utilisé Waf, encore trop jeune surement). Il faut penser le truc suffisamment adroitement pour pouvoir désactiver des librairies et des bouts de code suivant la plateforme. Les fichiers de build ainsi que le logiciel lui-même seront donc pensés de manière assez modulaires.
La deuxième étape est d'utiliser un langage multiplateforme et des librairies multiplateformes -> pour du C++ l'idéal est donc Qt qui permet de limiter le nombre de dépendances. Boost aussi est assez sympa pour le multiplateforme.
La troisième étape (facultative) est de mettre en place un Buildbot qui recompile automatiquement pour toutes les plateformes et génère les binaires.
Sur le repo, de mon point de vue, toutes les petites librairies (genre zlib, TinyXML...) sont intégrées dans un répertoire 3rdparty et recompilées en utilisant le système de build du logiciel (par exemple CMake). Pour les grosses bibliothèques manquantes sur une plateforme, l'idéal est de commiter les versions binaires (en les mettant à jour régulièrement bien sur). L'idée est de centraliser le bordel et de pouvoir effectuer un checkout sur un PC neuf sous n'importe quel OS/compilo sans devoir installer 10 librairies externes avant de pouvoir compiler le logiciel en question.
Bref porter sous Windows une appli Linux C/C++ qui a pas mal de dépendances et qui n'a pas été pensé pour dès le départ, c'est chaud car sous Windows rien n'est livré avec l'OS et le compilo. C'est principalement le cas pour les applis GTK+ qui se tapent énormément de dépendances en plus de GTK+ (glib, xml, dbus, sql...)
Bien choisir ces outils et librairies permet d'adresser Windows qui accapare ~90% des utilisateurs, bref ca vaut le coup. Firefox et OpenOffice.org n'auraient pas eu le succès qu'on leur connait s'il n'existait pas de version Windows.
[^] # Re: Mingw ain't dead
Posté par tanguy_k (site web personnel) . En réponse au journal Qt Creator 1.2 & Qt 4.5.2. Évalué à 10.
Pour bien comprendre, à la base il y a les Makefile bas niveau format GNU ou VC++ qui sont donc dépendant d'une plateforme/compilateur.
SCons, CMake, Waf, QMake... sont des systèmes de compilation haut niveau multiplateforme. CMake et QMake par exemple génèrent des Makefiles au format GNU et VC++ alors que SCons et Waf reimplementent tout en Python.
La première étape est donc d'utiliser un système de compilation multiplateforme. Mon préféré est CMake (SCons est beaucoup trop lent et j'ai jamais utilisé Waf, encore trop jeune surement). Il faut penser le truc suffisamment adroitement pour pouvoir désactiver des librairies et des bouts de code suivant la plateforme. Les fichiers de build ainsi que le logiciel lui-même seront donc pensés de manière assez modulaires.
La deuxième étape est d'utiliser un langage multiplateforme et des librairies multiplateformes -> pour du C++ l'idéal est donc Qt qui permet de limiter le nombre de dépendances. Boost aussi est assez sympa pour le multiplateforme.
La troisième étape (facultative) est de mettre en place un Buildbot qui recompile automatiquement pour toutes les plateformes et génère les binaires.
Sur le repo, de mon point de vue, toutes les petites librairies (genre zlib, TinyXML...) sont intégrées dans un répertoire 3rdparty et recompilées en utilisant le système de build du logiciel (par exemple CMake). Pour les grosses bibliothèques manquantes sur une plateforme, l'idéal est de commiter les versions binaires (en les mettant à jour régulièrement bien sur). L'idée est de centraliser le bordel et de pouvoir effectuer un checkout sur un PC neuf sous n'importe quel OS/compilo sans devoir installer 10 librairies externes avant de pouvoir compiler le logiciel en question.
Bref porter sous Windows une appli Linux C/C++ qui a pas mal de dépendances et qui n'a pas été pensé pour dès le départ, c'est chaud car sous Windows rien n'est livré avec l'OS et le compilo. C'est principalement le cas pour les applis GTK+ qui se tapent énormément de dépendances en plus de GTK+ (glib, xml, dbus, sql...)
Bien choisir ces outils et librairies permet d'adresser Windows qui accapare ~90% des utilisateurs, bref ca vaut le coup. Firefox et OpenOffice.org n'auraient pas eu le succès qu'on leur connait s'il n'existait pas de version Windows.
Ouai je sais je parle trop, j'avais envie :-)