[C++] PCH ou pas ?

Après certains tests et expérimentations, je ne suis toujours pas sûr de comment bien utiliser les PCH. Et vous, vous faites quoi ? Vous avez déjà rencontré des problèmes avec ? Si vous les utilisez sur un projet en cours de développement, globalement ça aide au niveau des temps de compilation ou pas ? Car si on modifie juste un petit truc dans un header, on risque de redéclencher une compilation totale, alors qu’en faisant des includes et des prédéclarations de façon intelligente, on peut ne recompiler que ce qui est vraiment nécessaire. Et vos projets sont habituellement architecturés en une série de petites libs ou en un gros bloc ?

En gros, quelle est votre opinion ?

Bon en général, j’utilise massivement les pch. J’ai un fichier qui génère le pch par projet. Ce pch est créé à partir des headers les plus souvent utilisés mais rarement modifiés (trés souvent des interfaces). Du coup, les temps de compilation sont extrèrement courts, dés lors que je ne modifie pas un fichier inclue dans un pch.

ex:
Projet: RenderEngine

Ce projet crée une lib utilisée par d’autres projets.

Le pch est généré par: precompiled.cpp qui inclue le fichier RenderEngine/precompiled.h.

//RenderEngine/precompiled.h #include "RenderEngine/IDriver.h" #include "RenderEngine/IMaterial.h" #include "RenderEngine/IMesh.h" #include "RenderEngine/IKDTree.h"

Projet: Exemple_1

Ce peojet est une application Win32 qui utilise les libs de plusieurs projets:
RenderEngine, SoundEngine, PhysicEngine, etc…

Le pch est généré par precompiled.cpp qui inclue le fichier App/precompiled.h

//App/precompiled.h #include "RenderEngine/precompiled.h" #include "SoundEngine/precompiled.h" #include "PhysicEngine/precompiled.h"

Bon, je sais pas si c’est clair, ni si c’est la manière la plus efficace d’utiliser les precompiled headers, mais c’est comme ça que je procède.

Que je dis pareil que le gars que je quote en le citant.

En gros pch = headers qui ne bougent pas => temps de compilation plus court

En revanche, je n’utilise pas pour les projets multi-platform parce que je suis une grosse feignasse… :stuck_out_tongue: