
qmake peut utiliser les en-têtes précompilés, mais CMake ne le peut pas, du moins de manière native (il existe des dizaines de modules d’extension pour les activer, cependant). Un prototype d’inclusion existe depuis deux ans, mais n’a pas été fusionné avec CMake. Les développeurs de Qt ont continué le développement : le code initial ne fonctionnait qu’avec Visual Studio et Xcode, la nouvelle version peut aussi être utilisée avec Ninja et des Makefile. Deux styles de génération de fichiers d’en-têtes précompilés sont disponibles : à la Visual C++, avec un pch.h et un pch.c qui, une fois compilés, donnent un pch.pch et un pch.obj (qui doit être utilisé pendant l’édition des liens) ; à la GCC, avec un pch.h et un pch.c qui, une fois compilés, donnent uniquement un pch.gch (sans changement à l’étape d’éditions des liens). Pour la compilation de Qt Creator, cette modification de CMake apporte des gains de vitesse entre 22 % et 37 % :
Une autre amélioration récente de CMake, requise pour les en-têtes précompilés, est la gestion de la compilation par lots (avec une unité de compilation unique, amalgamée ou jumbo, entre autres noms). Au lieu d’assembler les fichiers d’en-tête les plus utiles, il s’agit de combiner plusieurs fichiers source (donc des .cpp) en un seul, afin d’appeler moins souvent le compilateur (donc de moins souvent lire les fichiers d’en-tête, d’instancier les templates). Le reste de la chaîne de compilation apprécie aussi, puisqu’il y a moins de fichiers objet à lier. L’inconvénient est que tous les projets ne sont pas compatibles. En combinant les fichiers source huit par huit, le temps de compilation de Speedcrunch diminue de 23 % à 54 %, selon le compilateur.
Les modifications proposées ne sont pas encore incluses dans les dernières versions de CMake, la revue de code est toujours en cours, mais il est plus que probable qu’elles y seront pour la sortie de Qt 6 (pas avant 2020).
Source : Precompiled Headers and Unity (Jumbo) Builds in upcoming CMake.
Vous avez lu gratuitement 6 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.