Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mettre à jour le MinGW GCC de Code::Blocks

Comment installer un nouveau gcc et le configurer sous Code::Blocks

14 novembre 2015 à 12:38:23

*****************************************************************************************

Note importante

Ce qui suit est obsolète, depuis que j'ai écris ce tuto, beaucoup d'eau est passée sous les ponts... Si à l'époque C::B pouvait faire figure d'IDE du pauvre, ce n'est plus le cas. Aujourd'hui les deux meilleurs IDE C++ du marché sont gratuits, sous certaines conditions (des affaires de gros sous, qui ne concernent pas les débutants, tant qu'ils sont débutants, ensuite ça peut changer...). D'un côté vous avez C::B une antiquité, conseillé par votre tuto c++ favori (qui est complètement à la ramasse aussi au passage), de l'autre des IDE qui sont à la pointe, et tout deux livrés avec un très bon compilateur (Visual Studio et QtCreator). Avec QtCreator on peut même choisir, si un ça ne suffit pas, tu peux en mettre plusieurs... Contrairement à une idée reçue, QtCreator est certes conçu pour bosser avec Qt, mais il fonctionne très bien aussi avec des projets qui n'ont aucune liaison avec Qt.

Aujourd'hui, choisir C::B, comme environnement d'apprentissage, c'est comme s'accrocher un gros boulet au pied, sur tous les plans, les deux autres sont très loin devant. 

*****************************************************************************************

Bonjour,

J'ai remarqué que bon nombre de débutants qui passent par ici, ont suivi le tuto OC à la lettre et se retrouvent avec un compilateur viellot (gcc 4.7.1) et mal configuré. Ce petit post n'est pas une question mais un mini-tutoriel pour mettre à jour le compilateur et le configurer pour qu'il devienne votre meilleur ami. A l'heure où j'écris ce poste la dernière version de gcc est la version 5.2.0, c'est la version qu'il faut choisir si possible, car c'est celle qui offre le meilleur support du C++. A défaut, se rabattre sur la version 5.1.0 ou la version 4.9.2. Les versions antérieures n'offrent qu'un support incomplet de C++11.

La première chose à faire est de télécharger une nouvelle distribution de MINGW gcc. Ca se trouve assez facilement avec google mais je vais quand même vous donner quelques liens:

http://tdm-gcc.tdragon.net/   C'est la fameuse distribution TDM, ils n'y a pour l'instant que gcc 5.1

http://nuwen.net/mingw.html  Cette distribution est concoctée par Stephan T. Lavavej, un grand spécialiste de la bibliothèque standard du C++, il s'occupe du développement de celle de Visual C++. Cette distribution contient un certain nombre de bibliothèques supplémentaires dont boost (gcc 5.2.0 + boost 1.59 à l'heure ou j'écris ces lignes).

On peut en trouver d'autres ici:

https://sourceforge.net/projects/mingw-w64/files/?source=navbar   Les distributions que j'utilise habituellement viennent de là. 

en 32 bits:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/6.3.0/

en 64 bits:  https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/6.3.0/

Cette liste n'est pas exhaustive, il y en a bien d'autres, si vous en connaissez de bonnes, n'hésitez pas à poster un lien je les ajouterai.

Une fois téléchargée, il faut commencer par l'installer, certaines ont un programme d'installation (suivre les instructions d'installation sur le site ad-hoc), d'autres comme celles que j'utilise sont de simples archives à décompacter. 

Un conseil: Par le passé, les distributions de MinGW n'aimaient pas trop les chemins avec des espaces, j'ignore si c'est toujours d'actualité. Ne prenez pas de risques, un petit chemin bien court et sans espace fera parfaitement l'affaire.

Configuration de Code::Blocks

En l'état notre nouvelle version de gcc n'est utilisable qu'en ligne de commande, si on ne change pas la configuration de Code::Blocks, il continuera à utiliser sa vielle version de gcc. Pour configurer Code::Blocks ça se passe dans le menu Settings.

 On commence par changer la chaine de compilation

Il faut remplacer le chemin qui se trouve dans Compiler installation directory par celui dans lequel on a installé notre nouveau gcc. Ensuite, il faut vérifier que les noms des différents programmes sont les bons. Ici, j'ai installé mon nouveau gcc dans d:\devtools\mingw64. Les exécutables de la chaine de compilation sont dans un sous répertoire bin.

Ensuite il faut faire pareil pour le debugger

Modifier le chemin de l'exécutable.

Normalement, c'est tout, maintenant CodeBlocks va utiliser notre nouvelle version de gcc, mais ce n'est pas suffisant. Pour profiter du c++14, il faut configurer le compilateur. Pour cela, on retourne dans Settings puis Compiler

Ici, cocher toutes les cases qui parlent de warning ou d'erreur sauf 2:

  • Stop compiling after first error [-Wfatal-errors]
  • Inhibits all warning messages [-w]

Puis on va dans l'onglet Other Options et on remplit la la fenêtre

Voilà, maintenant, on a un compilateur configuré en mode paranoïaque, qui ne tolèrera plus la moindre petite bourde. Configuré comme ça, il va être super pénible, et vous obliger à coder très proprement et à bien réfléchir à ce que vous faites.

Dernière étape vérifier que tout baigne

Pour cela, on va créer un petit projet console et le compiler

Tout va bien le compilateur est fonctionnel. __cplusplus est une macro qui contient la version du langage supportée, chez moi le programme va afficher

Hello world! my version is 201402

Edit, mise à jour des liens, les précédents étaient un petit peu périmés ;)

-
Edité par int21h 9 novembre 2019 à 20:34:45

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
14 novembre 2015 à 12:47:34

Je conseille la version de STL, rien que pour les libs associées. Par contre, pas forcement fan de C::B, je conseille Qt Creator ou MSVC.

HS : ton "article" ne va pas rester en haut du forum. Ca serait peut être bien de mettre cela sur un blog ou site perso

  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2015 à 12:55:56

Quant à moi je déconseille vivement d'activer TOUS les warnings de GCC, ils ne sont pas tous bon à prendre (y compris/surtout ceux de Scott Meyers), je déconseille également la version TDM de MinGW, ne serait-ce que pour sjlj (mais je crois voir sur leur site qu'on peut maintenant configurer ça).

Sinon, belle initiative.

  • Partager sur Facebook
  • Partager sur Twitter

Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

14 novembre 2015 à 13:12:40

Je n'ai ni l'un ni l'autre malheureusement ;(

J'ai écris ça surtout à partir de la constatation que la plupart des débutants qui passent par ici, utilisent Code::Blocks, c'est plutôt à eux que ce post est destiné, si je le mets sur un blog ou un site perso, ils ne le verront pas. En fait je ne suis pas du tout fan de Code::Blocks, je l'ai juste réinstallé pour l'occasion, et j'ai simplement raccroché le mingw que j'utilise par ailleurs. Il est probable que Code::Blocks sera désinstallé bien avant gcc. Comme toi, je lui préfère largemement MSVC et QtCreator. 

J'ai nommé mon pojet testcb2, parce que j'avais déjà un projet testcb, reliquat de l'époque où je m'initiais à CMake.

Je vais éventuellement contacter un modérateur pour peut être le faire épingler, étant donné que Code::Blocks est l'IDE utilisé par le "cours officiel" d'OC, ça passera peut être. Sinon je le mettrais dans ma signature.

Edit @ Lynix: je suis trè loin d'avoir activé tous les warning possibles de gcc, si tu vas voir la doc de gcc tu vas voir qu'il y en a beaucoup plus que ça. Dans le tas, j'en ai peut être activé des discutables (et j'ai peut être oublié d'en activer des importants aussi). Pour un programmeur confirmé, activer tout ces warnings n'est pas forcément une bonne idée, parce que quand on est confirmé, on sait un peu ce que l'on fait (ou au moins on est censé savoir), donc effectivement ça a moins d'importance. Par contre quand on débute, c'est différent, il faut mettre un niveau de warning extrêmement élevé pour que le compilateur signale absolument tout ce qui est susceptible de poser un problème, afin de nous obliger à écrire le code le plus propre possible. Les warning de Scott Meyers vont signaler par exemple que le constructeur de copie / opérateur d'assignation n'ont pas été défini, alors qu'ils auraient du l'être (éventuellement delete) compte tenu de la structure de la classe (le compilateur a un peu de mal a faire la distinction entre sémantique d'entité et sémantique de valeur), qu'un constructeur mono-argument devrait être explicit, pour eviter des conversions innoportunes. Ce sont des warning qui peuvent aider un débutant à progresser. 

-
Edité par int21h 14 novembre 2015 à 13:36:31

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
14 novembre 2015 à 14:12:50

Merci int21h pour ce tuto !

Je l'ai mis dans mes marque-pages favoris; je m'en servirai quand j'aurai un nouvel ordi dans quelques semaines, histoire de pouvoir utiliser Code::Blocks avec un compilo à jour.

(Ce topic est à épingler, ça aiderai beaucoup de personnes qui souhaitent programmer en C++ moderne)

  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2015 à 16:02:08

Gaetano-GX a écrit:

Merci int21h pour ce tuto !

Je l'ai mis dans mes marque-pages favoris; je m'en servirai quand j'aurai un nouvel ordi dans quelques semaines, histoire de pouvoir utiliser Code::Blocks avec un compilo à jour.

(Ce topic est à épingler, ça aiderai beaucoup de personnes qui souhaitent programmer en C++ moderne)


Dans ton cas particulier, vu que tu vas changer de machine, mon conseil serait plutôt d'en profiter au passage pour changer d'IDE. gbdivers a cité MSVC (Visual Studio) et QtCreator, ces deux là sont à des années lumières de Code::Blocks en terme d'ergonomie et de fonctionnalités. Tu vas certainement perdre un peu de temps pour apprendre à t'en servir, mais c'est insignifiant par rapport à celui que tu vas gagner une fois que tu auras fait ce petit effort. 

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
15 novembre 2015 à 13:53:23

@int21h: merci pour ta réponse.

Visual Studio 2015 inclue la dernière version de MinGW ?

Merci d'avance.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
15 novembre 2015 à 13:54:08

Gaetano-GX a écrit:

@int21h: merci pour ta réponse.

Visual Studio 2015 inclue la dernière version de MinGW ?

Merci d'avance.

Visual Studio utilise son propre compilateur, et pas MinGw/GCC ;) .

-
Edité par Anonyme 15 novembre 2015 à 13:55:24

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2015 à 15:40:06

Visual studio inclue son propre compilateur et son propre debugger, il n'utilise pas du tout mingw. A ce jour, je pense que c'est le meilleur choix pour faire du c++ sous Windows.
  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
16 novembre 2015 à 16:42:14

Franchement merci !

Quand on débute et que le compiler te plante tu es un peu paumé mais là franchement ça m'a aidé.

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2015 à 20:12:31

int21h a écrit:

Bonjour,

J'ai remarqué que bon nombre de débutants qui passent par ici, ont suivi le tuto OC à la lettre et se retrouvent avec un compilateur viellot (gcc 4.7.1) et mal configuré

<troll>
gcc 4.7.1 est suffisant pour faire du C with classes
</troll>

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2015 à 21:33:33

Salut,

int21h a écrit:

Visual studio inclue son propre compilateur et son propre debugger, il n'utilise pas du tout mingw. A ce jour, je pense que c'est le meilleur choix pour faire du c++ sous Windows.

Heu, tu parle de MinGW comme meilleur choix ou de VC++?

MinGW, j'aurais tendance à être d'accord, ne serait-ce que parce que cela te permet d'avoir, par défaut, un code qui sera tout à fait portable sous linux ;)

Par contre, VC++ (le compilateur de chez microsoft) m'a régulièrement déçu, notamment au niveau du respect de la norme.

Mais j'avouerai n'avoir pas encore vraiment regardé à la version 2015 du compilateur de microsoft; respecte-t-il "un peu mieux" les normes C++11 et C++14 (notamment au niveau des fonctions defaulted et deleted ainsi que des nothrow) ?

  • Partager sur Facebook
  • Partager sur Twitter
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
16 novembre 2015 à 23:23:16

Je parle au niveau IDE et sur du dev essentiellement orienté Windows. Le confort de l'IDE de Visual et sa panoplie d'outils n'a pas vraiment d'équivalent à part peut être QtCreator.

Le support de la norme m'a l'air correct, après je n'ai pas non plus tout regardé en détail. Il reste quelques trucs absents (variables template, constexpr c++14 notamment), mais ça a l'air d'aller dans le bon sens. Je n'ai pas encore trop eu l'occasion de coder du neuf pour l'instant, je n'ai fait pour ainsi dire que du "portage" et un peu de refactoring. Là je bosse en parallèle avec gcc 4.9.2 et vs2015, il n'y a pas trop de mauvaises surprises, si ça passe sur l'un ça passe sur l'autre.

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
17 novembre 2015 à 0:09:06

Tu as bien de la chance, le nouveau projet que j'ai terminé ne compile toujours pas sur le VS de appveyor (parameter pack must be expanded in this context. (en sachant qu'il l'est déjà...)). Et il y a encore des erreurs avec une version récente (testé sur http://webcompiler.cloudapp.net/ version 19.00.23427.0(x86)).

(Note: comment traduit-on le numéro de version en date de sortie ?)

Pour le support de VS: https://msdn.microsoft.com/en-us/library/hh567368.aspx (fonctions defaulted et deleted + noexcept: ok.)

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2015 à 9:21:44

jo_link_noir a écrit:

(parameter pack must be expanded in this context. (en sachant qu'il l'est déjà...)).

Tu es bien sûr que ton code est à la norme ? Un des gros défaut de GCC (et peut-être aussi de Clang) est d'être permissif et de laisser passer des trucs non-standards.

Personnellement je n'ai aucun problème avec mes templates variadiques sous VS2015, les seules choses ne passant pas étant les constexpr C++14 et les variables template (dans le domaine de ce qui m'impacte bien sûr), ainsi que la constante __cplusplus

koala01 a écrit:

nothrow

noexcept^^

-
Edité par Lynix 17 novembre 2015 à 9:22:09

  • Partager sur Facebook
  • Partager sur Twitter

Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

17 novembre 2015 à 10:00:23

Marche nickel, merci int21h ^^
  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2015 à 11:03:18

jo_link_noir a écrit:

(Note: comment traduit-on le numéro de version en date de sortie ?)

Tu veux dire :

  • MSVC 2008 = v9
  • MSVC 2010 = v10
  • MSVC 2012 = v11
  • MSVC 2013 = v12
  • MSVC 2015 = v14

?

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2015 à 14:55:49

@gbdivers: Non, "MSVC 19.00.23427.0(x86)", "MSVC 19.0.23026.0", etc. En réalité, j'ai besoin d'une liste des modifications (bugs corrigés et nouvelles fonctionnalité supportés) histoire de savoir à quoi sont du certaines erreurs que je n'arrive pas à reproduire (ma faute ou différence de version).

Tu es bien sûr que ton code est à la norme ? Un des gros défaut de GCC (et peut-être aussi de Clang) est d'être permissif et de laisser passer des trucs non-standards.

Toujours :D. Dans les faits, je ne sais pas. Je suppose que oui, mais si le compilateur ne dit rien, je ne m'en rends pas compte (Clang est en général moins permissif). Après, j'ai principalement joué avec des std::integral_sequence et propagé des listes de paramètres en plus petit groupe dans des fonctions. Un truc comme 'foldt(f, 1, 2, 3, 4, 5)' -> 'f(f1,2), f(f(3,4), 5)'. À part des template variadique à tout va, rien d'extraordinaire.

La compile: https://ci.appveyor.com/project/jonathanpoelen/falcon-fold Le code: https://github.com/jonathanpoelen/falcon.fold/blob/master/falcon/fold.hpp

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2015 à 21:28:22

Il y a les tableaux de supports par poposal et par version  qui peuvent aider

http://en.cppreference.com/w/cpp/compiler_support 

Je suis en train de me faire un bout de script CMake qui pourrait me faire une série test pour le générateur choisi et me créer des variables CMake à partir desquelles je pourrais définir où non certains define. La macro principale est presque prête. L'idée est en gros d'écrire des test cases dont le main retourne 0 si le test est ok, != 0 sinon.

En fontion du nom du test, je teste seulement la compilation:

  • Si le nom du cpp se termine par fail_compile, je teste que la compilation échoue (exemple: utiliser un constructeur delete)
  • Si le nom du cpp se termine par _compile, je teste que la compilation réussit (exemple: est ce que la bibliothèque standard contient std::make_unique)

ou bien la compilation et l'exécution 

  • Si le nom du cpp se termine par fail_run, je teste que la compilation réussit, mais l'exécution échoue (eg le return du main !=0) (pas d'idée d'exemple)
  • Si le nom du cpp se termine par _run, je teste que la compilation réussit, et l'exécution réussit (eg le return du main = 0) (compiler et executer un petit programme utilisant la feature qu'on veut tester, qui est censé devoir marcher).

-
Edité par int21h 17 novembre 2015 à 21:31:44

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
17 novembre 2015 à 23:53:56

_MSC_FULL_VER https://msdn.microsoft.com/en-us/library/b0084kay.aspx ?

Cette info est déjà affichée par les outils que j'utilise. La date de sortie de version me permettrait de savoir si tel correctif est présent dans telle version. Par exemple, mon erreur semble liée à ce rapport de bug corrigé dans la "prochaine release", d'après un message du 22/05/2015.

  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2015 à 14:45:55

Merci aux contributeurs de ce Post (que je viens d'utiliser!)

Je me permet juste deux questions:

  • Dans l'écran"Global compilor options" / "Other option", Int21h nous propose d'ajouter la commande "-Wold-style-cast", hors, sauf erreur de ma part, il semble qu'elle ne soit utile que pour le C et pas le C++ (ref ici) Donc je ne l'ai pas mise! Est ce que j'ai bien fait ?
  • Lors que j'ai lancé la compilation de mon premier "Hello word!", il m'a fallut changer le chemin des includes (setting/compilor/search directory/compilors) et ajouter le chemin des includes du nouveau compilateur. Est ce ce qu'il fallait faire ?

Merci d'avance pour la réponse.

  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2015 à 16:15:07

1/

-Wold-style-cast (C++ and Objective-C++ only)Warn if an old-style (C-style) cast to a non-void type is used within a C++ program. The new-style casts (dynamic_caststatic_castreinterpret_cast, and const_cast) are less vulnerable to unintended effects and much easier to search for.

A ne surtout pas confondre avec -Wold-style-declaration qui est effectivement spécifique au C. La forme des déclarations/définitions à été modifiée en 1989 lors de la normalisation du C. La forme qui a été adoptée à l'époque n'est pas la forme introduite par Kerningham & Ritchie lorsqu'ils ont créé le C. Ce warning est destiné à prévenir si la forme de déclaration originale est utilisée.

2/ 

S'ils étaient renseignés alors oui il fallait le faire, cependant l'arborescence de mingw étant plus ou moins figée, le compilateur retrouve généralement ses petits ;)

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
23 janvier 2016 à 16:46:16

int21h a écrit:

A défaut, se rabattre sur la version 5.1.0 ou la version 4.9.2. Les versions antérieures n'offrent qu'un support incomplet de C++11.


Bonjour,

Je viens d'installer la dernière version de Code::Blocks (15.12 RC1) avec le compilo gcc 4.9.2 justement. Ma question est donc de savoir si cette version de gcc (ou Mingw pour windows) est acceptable pour apprendre à coder en C++ moderne (en suivant le cours de gbdivers) ?

Si ce n'est pas le cas, je préfère attendre la sortie de C::B 15.12 en version stable avant de suivre le tuto de int21h pour installer gcc 5.x.

Merci d'avance pour vos réponses...

Bien cordialement.

  • Partager sur Facebook
  • Partager sur Twitter
23 janvier 2016 à 17:19:26

Le cours se base sur le C++14, mais la différence entre le C++11 et C++14 est minime, tu auras au pire quelques codes qui ne passent pas.
  • Partager sur Facebook
  • Partager sur Twitter
4 février 2016 à 20:06:03

Bonsoir,

J'ai installé TDM GCC en suivant le tuto, mais j'ai ce message :

"testcs1 - Debug": The compiler's setup (GNU GCC Compiler) is invalid, so Code::Blocks cannot find/run the compiler.
Probably the toolchain path within the compiler options is not setup correctly?! (Do you have a compiler installed?)
Goto "Settings->Compiler...->Global compiler settings->GNU GCC Compiler->Toolchain executables" and fix the compiler's setup.
Skipping...
Nothing to be done (all items are up-to-date).

Target uses an invalid compiler; run aborted

Mais voici le contenu de ma fenetre "Compiler" :

Merci d'avance :).

  • Partager sur Facebook
  • Partager sur Twitter
23 février 2016 à 15:02:34

(up... pourquoi cette discussion n'est pas en post-it dans le forum, pour rester bien visible ?)
  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2018 à 22:48:42

Quelques petites mises a jour, si tu veux

A l'heure où j'écris ce poste la dernière version de gcc est la version 5.2.0

8.1 depuis le 2 mai. 6.x est encore supporté.

> TDM

Toujours la 5.1, depuis 2015. A mon avis, c'est un projet mort. A virer.

Cette distribution contient un certain nombre de bibliothèques supplémentaires dont boost (gcc 5.2.0 + boost 1.59 à l'heure ou j'écris ces lignes).

GCC 7.3.0 et Boost 1.66.0.

https://sourceforge.net/projects/mingw-w64/files/?source=navbar   Les distributions que j'utilise habituellement viennent de là. 

Pourquoi donner mingw-w64 (qui ne semble plus être mis a jour) et pas Mingw ?

EDIT : ah si. Il y a des liens avec GCC 7.3, GCC 6.4 et GCC 5.4. Mais dans tous les cas, pourquoi mingw-w64 et pas mingw ?

  • Partager sur Facebook
  • Partager sur Twitter