web-dev-qa-db-fra.com

Pourquoi Qt utilise-t-il son propre outil de création, qmake?

Je viens de commencer à utiliser Qt et j'ai remarqué qu'il utilise son propre outil de création, qmake .

  • Pourquoi Qt utilise-t-il son propre outil de création?
  • Y a-t-il quelque chose de spécial qui l'empêche d'utiliser un outil de création standard?
  • Qmake appelle-t-il le compilateur C++ GCC ?
54
Trevor Boyd Smith

Qt utilise qmake pour prendre en charge de manière transparente les différents addons de Qt, notamment "moc, le compilateur de méta-objet" (qui fournit des signaux et des emplacements), "uic, le compilateur ui" (qui crée des fichiers d'en-tête à partir de fichiers de concepteur .ui), "rcc, le compilateur de ressources "(qui compile les ressources).

Rien ne vous empêche d'utiliser le système de construction que vous souhaitez. cependant, c'est beaucoup plus de travail. Par exemple, vous devez exécuter "moc" sur chaque fichier d'en-tête qui contient une classe qui a des signaux ou des emplacements. En général, ce n'est pas recommandé, en particulier pour quelqu'un qui commence tout juste à utiliser Qt.

QMake n'appelle pas directement g ++/gcc. Au lieu de cela, qmake crée des fichiers make natifs sur votre plate-forme actuelle. Sous Linux, il crée des fichiers de création standard GNU, sous Windows, il peut générer des fichiers de création Visual Studio, sous Mac OS X, il peut générer des fichiers de projet XCode. Vous invoquez ensuite votre système de génération natif (GNU make, ou MS NMake, ou xcodebuild ou autre), qui appellera votre compilateur natif (g ++/gcc ou autre).

56
Thomi

À mon avis, qmake est cool pour les projets simples (vous pouvez simplement qmake -project; qmake; make), mais horrible et pas suffisamment documenté pour les projets de grande envergure. En particulier, la fonctionnalité de configuration de qmake est une blague.

Les meilleurs systèmes de construction que je connaisse sont CMake et Waf (basés sur Python). Dans mes propres projets Qt, j'utilise CMake pour faire le travail. Tout comme les gars de KDE :)

8
Game Coder

Pour prendre en charge son système de signal/slot, Qt s'appuie sur un préprocesseur et un compilateur spéciaux qui génèrent des objets intermédiaires qui effectuent une grande partie du traitement. Ils appellent cela le compilateur de méta-objets ou [~ # ~] moc [~ # ~] .

Voir Documentation Qt 5: Utilisation du compilateur de méta-objets pour plus de détails.

Le MOC (avec quelques autres outils intermédiaires) fonctionne en conjonction avec qmake; un outil d'automatisation de construction qui produit des Makefiles dans votre format natif (VC++, g ++, etc.) qui construisent les fichiers intermédiaires générés par le MOC ainsi que tous vos fichiers source dans l'exécutable final.

6
Ron Warholic

qmake est conçu pour être multiplateforme et flexible. Il peut être compatible avec Microsoft Visual Studio et Xcode.

Vous pouvez tout trouver dans le qmake Manual .

qmake génère un Makefile basé sur les informations d'un fichier de projet. Les fichiers de projet sont créés par le développeur et sont généralement simples, mais des fichiers de projet plus sophistiqués peuvent être créés pour des projets complexes. qmake contient des fonctionnalités supplémentaires pour prendre en charge le développement avec Qt, y compris automatiquement les règles de construction pour moc et uic. qmake peut également générer des projets pour Microsoft Visual studio sans obliger le développeur à modifier le fichier de projet.

5
Brian Gianforcaro

En ordre

a) parce que cela fait beaucoup pour vous en coulisses

b) oui, voir a)

c) oui, il appelle g ++ (mais peut prendre en charge d'autres compilateurs si vous en avez)

3
Dirk Eddelbuettel