Dans nos projets nous utilisons pour le moment gcc en cross-compilateur sur un linux (via jenkins) pour produire des exe windows 32bits de nos produits et aussi gcc (version mingw) sur nos PC pour le développement.
Mais je m'occupe progressivement de faire la transition vers msvc. Nous n'avons pas encore fait réellement de test de comparaison mais nos premiers essais qui nous ont amener à décider la transition ont montrés que les exe qu'on obtient sont plus petits et qu'ils sont plus rapide à l'éxécution (j'ai une différence d'au moins 30% sur un exe).
Depuis qu'il y a la version Community, nous pouvons envisager d'utiliser le compilo de Visual Studio (pas dans nos moyens sinon) et la disponiblité prochaine des outils de compilation utilisable sans installer Visual Studio est une très bonne nouvelle (nous utilons un serveur d'intégration continue et on n'a pas franchement envie d'installer tout Visual Studio sur un serveur).
Les difficultés/différences entre les deux que je rencontre sont:
- Différence de support du C++11 (aucun des deux ne prend en charge complètement la norme, et chacun le fait différemment)
- msvc plus strict sur certaines choses, par exemple il génère une erreur de compilation quand on veut affecter un littéral double à une variable float, ce qui n'est pas plus mal. Et d'une façon général aussi plus de warning sur les conversions implicites qui risquent de faire perdre de l'information.
- En revanche, nos tests unitaires (en utilisant cpputest) détectent des memory leaks avec msvc qui ne sont pas présents avec gcc, en l'occurence quand on utilise des stream (stringstream ou tout simplement sur des lecture/écriture de fichiers). Apparemment l'explication c'est que windows ne libère pas immédiatement les stream de façon synchrone, mais je me retrouve obligé de désactiver la détection des memory leaks sur les fonctions en questions pour les tests passent.
- gcc nécessite qu'on désactive certaines optimisations pour éviter certains plantages aléatoires (quand on utilise certaines fonction de Eigen), on n'a pas ce problème avec msvc.
- msvc est assez limitant concernant le link de bibliothèques qui ont pu être compilées avec des options différentes, ça évite sans doute des erreurs mais c'est assez strict.
En ce qui concerne les options de compilation, elles sont aussi compliquées à maîtriser chez l'un que chez l'autre, après il y a une question d'habitude sans doute. Pour les compilations nous nous basons sur CMake et un serveur d'intégration continue, donc une fois les choses configurées ça roule tout seul. Pour le développement, nous utilisons Eclipse, a priori msvc est aussi censé s'intégrer avec mais je n'ai pas encore testé plus que ça, en particulier il faut voir le debugger.
Sinon une chose qui pourrait s'avérer limitant c'est tout simplement la disponiblité de bibliothèques non open-sources dans les format supportés par le compilateur (msvc étant assez strict là-dessus il faut faire attention)
2 |
0 |