Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Discussion :

CMake rattrape qmake en performance


Sujet :

Outils

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    24 991
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 24 991
    Points : 176 978
    Points
    176 978
    Par défaut CMake rattrape qmake en performance
    Qt 6 n’utilisera plus qmake pour gérer la compilation, c’est sûr. Le remplaçant actuellement prévu est CMake, mais il accuse un certain retard en termes de performance : le temps de compilation d’un projet explose en passant de qmake à CMake, dans certains cas. C’est pour cela que les développeurs de Qt apportent des contributions à CMake pour améliorer ces défauts — relativement mineurs, au vu de l’écosystème qui s’est construit autour de CMake.

    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 souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    mars 2013
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 565
    Points : 871
    Points
    871
    Par défaut CMake CQuoi ?
    J'ai jamais vraiment compris l'intérêt de CMake, pour build il ne suffit pas simplement de faire un Makefile et de build avec le compilateur ?
    La vitesse de compilation est-elle le seul intérêt à utiliser CMake ?

  3. #3
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 466
    Points : 3 179
    Points
    3 179
    Par défaut
    Citation Envoyé par Matthieu76 Voir le message
    J'ai jamais vraiment compris l'intérêt de CMake, pour build il ne suffit pas simplement de faire un Makefile et de build avec le compilateur ?
    La vitesse de compilation est-elle le seul intérêt à utiliser CMake ?
    Un Makefile n'est pas énormément portable. Son bon fonctionnement dépendra directement de la configuration de la machine du développeur (OS, emplacement et noms des outils de dev...).

    CMake résout ce problème de portabilité. Tu donnes à CMake deux fichiers : un fichier CMakeLists.txt décrivant le projet indépendamment de la configuration du développeur et un fichier CMakeCache.txt avec des données relatives à la configuration du développeur. À partir de ces deux fichiers, CMake est capable de :
    • Générer un fichier d'automatisation de build (Makefile, Ninja, Ant...).
    • Compiler un programme à partir d'une toolchain que tu lui passes en paramètre (MSVC, GCC...).
    • Générer des fichiers projets pour les EDI (Visual Studio, Eclipse, Qt Creator...).
    • Faire tourner les tests (CTest).
    • S'occuper du packaging de l'application (CPack).


    Concrètement tu partages :
    • Le fichier CMakeLists.txt indépendant de la machine du développeur. C'est le même fichier pour tout le monde.
    • Un sample de CMakeCache.txt où le développeur mettra sa configuration personnelle.


    CMake fera le café pour le reste. Autant te dire que c'est un outil très puissant.

    Ses concurrents se nomment Maven, Gradle ou encore qmake.

    Après pourquoi CMake ? On est ici sur une news Qt donc je vais répondre pour Qt. Les développeurs de Qt souhaitent remplacer le vieillissant et vénérable qmake à l'horizon de Qt 6. CMake est l'heureux élu pour succéder à qmake (je te passe les détails de la succession, à base de Qbs). CMake est donc la solution qui t'évitera d'avoir à réécrire ton fichier projet quand ton projet passera à Qt 6, où tu n'auras plus ni Qbs, ni qmake. L'un des travaux actuels des développeurs de Qt consiste donc à mettre CMake et qmake à parité voire plus, afin que l'arrêt de qmake se passe bien et que ce ne soit pas une grosse perte.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

  4. #4
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    mars 2013
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 565
    Points : 871
    Points
    871
    Par défaut
    Merci pour tes précisions.
    Juste encore un petite question :
    CMake est-il utilisé avec des outils tel que MS Azure, Jenkins ou encore Docker pour pourvoir déployer sur des serveurs ou existe-il des méthodes plus adapté pour compiler et déployer simplement ?

Discussions similaires

  1. [Compilation] Conversion de qmake à cmake
    Par alpha_one_x86 dans le forum Outils
    Réponses: 0
    Dernier message: 26/01/2010, 14h35
  2. [Compilation] QMake ou CMake ?
    Par eric_vi dans le forum Outils
    Réponses: 6
    Dernier message: 15/01/2010, 22h08
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 17h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 11h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo