web-dev-qa-db-fra.com

GCC à utiliser sous Windows pour remplacer MSVC?

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

Je pensais que la prochaine version de Visual Studio ajouterait peut-être ces nouvelles fonctionnalités. Cependant, après avoir lu ceci , 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 sous MSVC, car il semble déjà prendre en charge la grande majorité de C++ 11. Autant que je sache, cela signifierait utiliser MinGW (je n'ai encore vu aucune version Windows native de GCC). Mais je me demande si cela vaudrait la peine d'essayer:

  • Peut-il être utilisé en remplacement immédiat de cl.exe, ou impliquerait-il beaucoup de piratages et de problèmes de compatibilité pour que Visual Studio utilise un compilateur différent?
  • À mon avis, le principal argument de vente de Visual Studio est son débogueur. Est-ce toujours utilisable si vous utilisez un compilateur différent?
  • Puisque GCC vient du monde * nix et n'est pas natif de Windows, existe-t-il des problèmes de qualité de code lors de la création d'applications Windows natives, par opposition à l'utilisation du compilateur MSVC natif? (Si cela compte: la plupart de mes projets sont des jeux.)
  • En d'autres termes, la qualité de mon exe compilé souffrira-t-il de l'utilisation d'un compilateur non natif de Windows?
52
Nairou

MSVC a le grand avantage de proposer un IDE sans égal sous Windows, y compris le support du débogueur.

La meilleure alternative probablement à MinGW serait Code :: Blocks, mais il y a des mondes entre les deux, en particulier en ce qui concerne l'achèvement du code et le débogueur.

MSVC vous permet également d’utiliser certaines propriétés Microsoft (MFC, ATL et éventuellement d’autres) que MinGW ne prend pas en charge et facilite l’utilisation de GDI + et DirectX (bien qu’il soit possible de faire les deux avec MinGW).

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

MinGW compile également significativement plus lentement que MSVC (bien que les en-têtes précompilés aident un peu).

Malgré tout, GCC/MinGW est un compilateur de qualité entièrement fiable qui, à mon avis, surpasse toute version disponible à ce jour de MSVC en termes de qualité du code généré.
Ceci est un peu moins prononcé avec les versions les plus récentes de MSVC, mais reste visible. Particulièrement pour tout ce qui a trait à l'ESS, aux composants intrinsèques et à l'assemblage en ligne, GCC anéantit totalement MSVC depuis (bien qu'ils rattrapent lentement).

La conformité aux normes est également bien meilleure dans GCC, ce qui peut être une arme à double tranchant (car cela peut signifier qu'une partie de votre code ne sera pas compilée sur le compilateur plus conforme!), Tout comme le support de C++ 11.

MinGW prend également en charge éventuellement les exceptions DW2, qui sont totalement incompatibles avec la version "normale" et prennent plus de place dans l'exécutable, mais dont le côté positif est un "coût pratiquement nul" au moment de l'exécution.

41
Damon

Je veux ajouter des informations car le champ a peut-être changé depuis la question.

Le principal problème pour s’éloigner de MSVC était l’absence d’un bon IDE qui s’intègre parfaitement à MinGW. Visual Studio est un outil très puissant qui a longtemps été le seul lecteur Windows. Cependant, Jetbrains a publié une version d’aperçu de leur nouvelle Clion C++ IDE il y a quelques jours.

Le principal avantage est le travail sur des applications multiplates-formes. 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 à CMake, ce qui est également un avantage considérable par rapport à Visual Studio. Par conséquent, à mon avis, il convient d’envisager de passer maintenant à MinGW.

10
danijar

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

Si vous remplacez votre compilateur, vous devez vous assurer que chaque dépendance peut être générée avec ce nouveau compilateur. Ils ne sont pas faits pour être des plugins substituables (bien que Clang travaille pour le devenir ).

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

En dehors de cela, pour répondre à vos questions:

  1. Pour que VS utilise GCC en tant que compilateur, vous devez absolument passer à des makefiles ou à des étapes de construction personnalisées. Vous feriez 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 fournit des informations de débogage compatibles avec la GDB, et le format de débogage de VS est propriétaire, de sorte que rien ne changera bientôt dans cette zone.
  3. La qualité du code est aussi bonne que vous le voudriez. Voir au dessus.
  4. Non, la qualité de votre code augmentera réellement, car GCC indiquera plusieurs extensions standard supposées que MSVC vous cacherait. Tous les projets open source qui se respectent peuvent être compilés avec GCC.
7
rubenvb

Considérez le compilateur Intel (ou "Composer" comme ils semblent avoir pris l’appel) comme une autre option. Je ne sais pas trop où se situe sa prise en charge de C++ 11 par rapport à MS (certes, il a des lambdas), mais il s’intègre très bien avec VisualStudio (par exemple, différents projets au sein d’une solution peuvent utiliser les compilateurs Intel ou MS) et il y a Des efforts ont également été déployés pour faire correspondre les options en ligne de commande du compilateur MS.

1
timday

GCC et MSVC utilisent différentes conventions de nom en C++. Les dll C++ compilées par un compilateur ne peuvent pas être utilisées dans des applications compilées avec l'autre. Je pense que c’est la principale raison pour laquelle nous ne voyons pas une utilisation plus répandue de gcc dans Windows.

1
mikerobi

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

Vous pouvez utiliser MinGW ou Cygwin pour écrire des logiciels, mais introduisez des dépendances supplémentaires (en particulier dans le cas de cygwin). 

Un avantage peu souvent présenté par gcc par rapport à cl est que gcc peut être utilisé avec ccache pour accélérer considérablement les reconstructions ou distcc pour compiler en utilisant plusieurs autres machines en tant qu'esclaves de compilation.

1
IanNorton

Utilisez simplement le plugin VisualGDB Visual Studio 2017. Il peut utiliser n'importe quelle saveur Mingw. TDM-GCC-64 (64x32 bits) (posix), SysGCC (mingw 64), MinGw

Problème résolu ... visual studio 2017 + tout type de version Il a Linux, Windows, Android, Raspberry Pi, tout Linux, support de cartes de développement, Clang intelisense ... C’est incroyable. 30 jours d'essai.

0
TraceKira