67 votes

GCC vaut-il la peine d'être utilisé sous Windows pour remplacer MSVC ?

Je développe actuellement en C++ sur Windows, en utilisant Visual Studio 2010. Après l'annonce officielle de C++11, j'ai commencé à utiliser certaines de ses fonctionnalités qui sont déjà disponibles dans MSVC. Mais, comme prévu, la grande majorité des nouveaux changements ne sont pas supportés.

Je pensais que la prochaine version de Visual Studio ajouterait peut-être ces nouvelles fonctionnalités. Cependant, après avoir lu ce il semble que très peu de choses vont changer.

Je suis donc curieux de savoir s'il est possible d'utiliser GCC sous Windows plutôt que MSVC, car il semble déjà supporter la grande majorité de C++11. Pour autant que je sache, cela signifierait utiliser MinGW (je n'ai pas vu d'autres versions natives Windows de GCC). Mais je me demande si cela vaut la peine d'essayer :

  • Peut-il être utilisé comme un substitut de cl.exe, ou cela impliquerait-il de nombreuses modifications et des problèmes de compatibilité pour que Visual Studio utilise un compilateur différent ?
  • Le principal argument de vente de Visual Studio, à mon avis, est son débogueur. Est-il encore utilisable si vous utilisez un autre compilateur ?
  • Puisque GCC vient du monde *nix, et n'est pas natif de Windows, y a-t-il des problèmes de qualité de code en créant des applications Windows natives, par rapport à l'utilisation du compilateur MSVC natif ? (Si cela a de l'importance : la plupart de mes projets sont des jeux).
  • En d'autres termes, la qualité de mes exe compilés souffrira-t-elle de l'utilisation d'un compilateur non natif de Windows ?

0 votes

Vous pouvez trouver que l'attente de Visual Studio 11 peut être une option à considérer également.

1 votes

Si vous voulez utiliser mingw, vous devez aussi considérer d'autres idéaux.

0 votes

@vcsjones : Le site auquel j'ai fait référence concernait les modifications apportées à C++11 dans Visual Studio 11. Je n'ai pas été impressionné, d'où ce billet.

60voto

Damon Points 26437

MSVC a l'énorme avantage d'être livré avec un IDE qui n'a pas d'équivalent sous Windows, y compris le support du débogueur.

La meilleure alternative pour MinGW serait probablement Code::Blocks, mais il y a des mondes entre les deux, surtout en ce qui concerne la complétion de code et le débogueur.

De plus, MSVC vous permet d'utiliser certains éléments propriétaires de Microsoft (MFC, ATL, et peut-être d'autres) que MinGW ne prend pas en charge, et rend l'utilisation de GDI+ et DirectX plus facile et plus directe (bien qu'il soit possible de faire les deux avec MinGW).

Cygwin, comme mentionné dans un autre post, aura des dépendances supplémentaires et des problèmes de licence possibles (la dépendance est GPL, donc vos programmes doivent l'être aussi). MinGW n'a pas de telles dépendances ou problèmes.

MinGW compile également de manière significative plus lent que MSVC (bien que les en-têtes précompilés aident un peu).

Malgré tout cela, GCC/MinGW est un compilateur de qualité tout à fait fiable, qui, à mon avis, surpasse toutes les versions de MSVC disponibles à ce jour en termes de qualité du code généré.
Ce phénomène est un peu moins prononcé avec les versions les plus récentes de MSVC, mais reste visible. En particulier pour tout ce qui concerne SSE, les intrinsèques et l'assemblage en ligne, GCC a totalement anéanti MSVC depuis lors (bien qu'il rattrape lentement son retard).

La conformité aux normes est bien meilleure dans GCC également, ce qui peut être une arme à double tranchant (parce que cela peut signifier que certains de vos codes ne compileront pas sur le compilateur le plus conforme), tout comme le support de C++11.

MinGW supporte également, en option, les exceptions DW2, qui sont totalement incompatibles avec la saveur "normale" et prennent plus d'espace dans l'exécutable, mais du côté positif, leur coût est "pratiquement nul" en temps d'exécution.

3 votes

C'est un peu l'impression que j'ai eue... L'application résultante sera géniale, mais le processus de développement sera grandement diminué par rapport à ce que MSVC offre. Je me demande comment les développeurs Linux s'en sortent !

15 votes

Je n'ai pas vérifié depuis un moment, donc je peux me tromper, mais la dernière fois que j'ai vérifié, code::blocks ne m'a pas vraiment convaincu. Personnellement, je recommanderais Eclipse CDT ou, si cela utilise trop de ressources, QTCreator pour le développement de mingw.

5 votes

Eclipse a admis beaucoup Meilleure complétion de code, mais il est aussi 20 fois plus lourd et prend 10 fois plus de temps à démarrer, etc. Il est probablement plus puissant dans ses 2 millions d'options de construction aussi, bien que personnellement cela m'embrouille plutôt que d'être utile. Je suppose que c'est une question de goût personnel (de plus, je suis probablement un peu injustement biaisé en faveur de Code::Blocks). Mais il est certain qu'Eclipse peut être une alternative viable.

16voto

danijar Points 4522

Je veux ajouter quelques informations car le domaine a peut-être changé depuis que la question a été posée.

Le principal problème pour abandonner MSVC était l'absence d'un bon IDE qui s'intègre parfaitement à MinGW . Visual Studio est un outil très puissant et a été le seul acteur sur Windows pendant un certain temps. Cependant, Jetbrains a publié une version préliminaire de leur nouvel IDE C++ CLion il y a quelques jours.

Le principal avantage est de travailler sur des applications multiplateformes. Dans ce cas, une chaîne d'outils basée sur GCC peut rendre la vie beaucoup plus facile. De plus, CLion s'intègre étroitement avec CMake, ce qui est également un gros avantage par rapport à Visual Studio. Par conséquent, à mon avis, il vaut la peine d'envisager de passer à MinGW maintenant.

2 votes

Il n'y a toujours pas de bon IDE avec la même stabilité et le même support que MSVS ; CLion ne joue pas non plus dans la même cour (il est plein de bogues et le débogage avec GDB est un cauchemar).

9voto

rubenvb Points 27271

La prise en charge de C++11 par GCC est tout à fait phénoménale (et tout à fait à la hauteur de la conformité aux standards, maintenant que <regex> a été mis en œuvre).

Si vous remplacez votre compilateur, vous devrez vous assurer que chaque dépendance peut être construite avec ce nouveau compilateur. Ils ne sont pas faits pour être des plugins substituables (bien que Clang s'efforce de devenir ainsi ).

GCC est un bon compilateur, et peut produire du code qui a à peu près les mêmes performances, sinon meilleures, que MSVC. Il lui manque cependant quelques fonctionnalités de bas niveau spécifiques à Windows.

A part cela, pour répondre à vos questions :

  1. Pour faire en sorte que VS utilise GCC comme compilateur, vous devez vous tourner vers les makefiles ou les étapes de construction personnalisées. Vous seriez bien mieux de compiler à partir de la ligne de commande et d'utiliser CMake ou quelque chose de similaire.
  2. Vous ne pouvez pas utiliser le débogueur VS pour le code GCC. GCC produit des informations de débogage compatibles avec GDB, et le format de débogage VS est propriétaire, donc rien ne changera dans ce domaine de sitôt.
  3. La qualité du code est aussi bonne que vous le souhaitez. Voir ci-dessus.
  4. Non, la qualité de votre code augmentera en fait, car GCC signalera plusieurs extensions standard supposées que MSVC vous cacherait. Tous les projets open source qui se respectent peuvent être compilés avec GCC.

1voto

IanNorton Points 3797

Il ne peut pas être utilisé comme un remplacement direct des compilateurs Microsoft. Pour commencer, il possède un ensemble d'arguments de ligne de commande et d'options spécifiques au compilateur très différent.

Vous pouvez utiliser MinGW ou Cygwin pour écrire des logiciels mais introduire des dépendances supplémentaires (surtout dans le cas de Cygwin).

Un avantage peu souvent vanté de gcc par rapport à cl est que gcc peut être utilisé avec ccache pour accélérer considérablement les reconstructions ou distcc pour construire en utilisant plusieurs autres machines comme esclaves compilateurs.

1voto

timday Points 14860

Considérez le compilateur Intel (ou "Composer" comme ils semblent avoir pris l'habitude de l'appeler) comme une autre option. Je ne sais pas trop où en est son support de C++11 par rapport à MS (il a certainement des lambdas), mais il s'intègre très bien à VisualStudio (par exemple, différents projets dans une solution peuvent utiliser les compilateurs Intel ou MS) et des efforts ont également été faits pour correspondre aux options de la ligne de commande du compilateur MS.

15 votes

Le compilateur Intel désactive intentionnellement un grand nombre de ses optimisations lorsque le code s'exécute sur des puces AMD.

0 votes

@mikerobi Ce ne serait pas de l'antitrust ou quelque chose comme ça ? Rappelez-vous que M$ a été poursuivi pour avoir facilité l'utilisation d'Internet Explorer, et ne pas avoir d'APIs/etc permettant à d'autres navigateurs de s'intégrer dans le shell, ou quelque chose comme ça.

5 votes

@muntoo - non, il s'agit d'un "dispositif de sécurité", car Intel n'est pas expert en AMD et ne peut pas être sûr que ses optimisations sont correctes ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X