1. Les fichiers projets Qt

Afin de conserver une portabilité maximale au travers de systèmes aussi hétéroclites que Windows, Mac OS X ou Linux, Qt propose un ensemble d'outils de gestion des projets. La base de cet ensemble est représentée par un fichier se terminant par l'extension .pro (pour projet) et l'utilitaire qmake. Le principe est simple : la configuration du projet s'effectue au sein du fichier .pro et l'utilitaire qmake se charge de générer les scripts de compilation adéquats en fonction de la plate-forme (notamment la création des fameux Makefiles).

Ce principe de fonctionnement est très spécifique à Qt et des environnements de développement intégrés (EDI en français, IDE en anglais) comme Xcode ne sont pas conçus pour le supporter dès leur mise en route. Il existe toutefois des solutions pour contourner une partie des écueils que l'on peut rencontrer dans ce cas précis en acceptant de faire une croix sur certaines facilités.

2. Projet Xcode ou projet Makefile ?

Deux approches sont à considérer en débutant un développement Qt sous Xcode : faut-il choisir de travailler uniquement à partir des projets natifs Xcode (fichiers .xcodeproj) ou d'envisager un projet à base d'un fichier .pro et de Makefiles ?

Autant vous le dire immédiatement, la première solution n'offre que peu d'avantages puisque créer un fichier de projet Xcode pour gérer la totalité de votre développement ne permet pas de prendre en charge l'actualisation du contenu de votre fichier .pro lors de l'ajout de classes ou de boîtes de dialogues. Les fichiers .pro constituant la base d'un projet Qt, il vous serait alors impossible de transposer de façon immédiate vos fichiers sources depuis votre Mac vers n'importe quel autre système ou, plus ennuyeux, environnement de développement. C'est pourquoi nous choisirons la seconde approche.

3. Configurer un projet Makefile

Ce que nous appelons un « projet Makefile » est tout simplement une méthode détournée qui permet de configurer Xcode (ou n'importe quel autre IDE qui l'autorise) pour qu'il utilise un système de configuration à base de fichiers Makefile. L'intérêt, dans le cas de Qt, est que les fichiers .pro et qmake fonctionnent à merveille avec cette solution, de façon portable.

Nous ensivagerons les étapes de façon différente pour Xcode 3.0 ou Xcode 3.1 (en version beta à l'heure ou nous écrivons ces lignes) le cas échéant.

3-A. Pour commencer

La première étape consiste à créer un projet adapté.

3-A-1. Xcode 3.0

Créez un nouveau projet par le menu File > New project…

Sélectionnez le type External Build System (Système de Compilation Externe)

Après avoir sélectionné l'emplacement du projet, Xcode vous fournit un projet vide prêt pour compiler un fichier Makefile.

3-A-2. Xcode 3.1 (avant la beta 3 du SDK iPhone)

Créez un nouveau projet par le menu File > New project…

Sélectionnez le type de projet que vous souhaitez et nommez-le.

Dans la fenêtre de projet, supprimez toutes les entrées et les dossiers appartenant au projet.

Dans la section Targets, supprimez la cible par défaut.

3-A-3. Xcode 3.1 (après la beta 3 du SDK iPhone)

Créez un nouveau projet par le menu File > New project…

Sélectionnez le type External Build System (Système de Compilation Externe) dans la section Others (Autres)

Après avoir sélectionné l'emplacement du projet, Xcode vous fournit un projet vide prêt pour compiler un fichier Makefile.

3-B. Préparer l'exécution de qmake

La deuxième étape consiste à préparer les cibles pour exécuter qmake puis compiler les Makefiles générés.

3-B-1. Xcode 3.0

Avec cette version de Xcode, vous disposez déjà d'une cible permettant l'appel de make et la compilation des Makefiles. Il ne vous reste plus qu'à ajouter la cible propre à qmake ;

Rendez-vous dans le menu Project > New target… ;

Sélectionnez le type External Target (Cible externe) ;

Nommez la cible qmake et terminez. La cible doit apparaître dans la section Targets de votre projet ;

Double-cliquez sur cette nouvelle cible pour faire apparaître ses propriétés ;

Dans le champ Build Tool, entrez /usr/bin/qmake ;

Dans le champ Arguments, supprimez le texte existant et entrez –spec macx-g++ ;

Fermez la fenêtre.

3-B-2. Xcode 3.1

Rendez-vous dans le menu Project > New target… ;

Sélectionnez le type External Target (Cible externe) dans la section Others ;

Nommez la cible make et terminez. La cible doit apparaître dans la section Targets de votre projet ;

Une deuxième fois, rendez-vous dans le menu Project > New target… ;

Sélectionnez le type External Target (Cible externe) ;

Nommez la cible qmake et terminez. La cible doit apparaître dans la section Targets de votre projet ;

Double-cliquez sur cette nouvelle cible pour faire apparaître ses propriétés ;

Dans le champ Build Tool, entrez /usr/bin/qmake ;

Dans le champ Arguments, supprimez le texte existant et entrez –spec macx-g++ ;

Fermez la fenêtre.

3-C. Terminé !

Il ne nous reste plus qu'à déterminer les dépendances entre les cibles. Sélectionnez la cible qmake et glissez-la sur l'autre cible de votre projet pour que cette dernière en devienne dépendante. Si la dépendance a été validée, la cible qmake devrait apparaître comme un enfant de la première cible (cliquez éventuellement sur la flèche correspondante pour déplier la branche relative à la cible). Les dépendances ont une signification simple : toute cible qui dépend d'une autre exécutera la cible dont elle dépend avec elle-même. Dans le cas présent, nous demandons à ce que la cible active exécute la cible qmake pour générer les fichiers Makefiles à partir des données du projet avant de vouloir lancer la compilation avec make.

4. Fichiers .pro et début du développement

La dernière étape consiste à insérer dans le projet Xcode les éléments de votre projet Qt. Nous supposons que vos fichiers Qt se trouvent dans le même répertoire que le fichier .xcodeproj. Il vous suffit alors de les ajouter au projet Xcode. Pour ce faire, utilisez le menu Project > Add to Project… et sélectionnez votre fichier .pro, vos fichiers sources et éventuellement les autres fichiers susceptibles d'en faire partie (ressources, fichiers QtDesigner, etc.).

5. Compilation

A ce stade, votre projet devrait être prêt à compiler. C'est l'heure de vérité. Tentez le menu Build > Build et contrôlez le résultat dans la barre d'état de Xcode ou dans la fenêtre Build > Build Results.

6. Lancement de l'exécutable

Il est temps maintenant d'exécuter votre logiciel. Utilisant un système de compilation externe, Xcode n'est pas en mesure de connaître de façon automatique l'emplacement de votre exécutable. Vous allez devoir l'ajouter au projet. Utilisez le menu Project > New Custom Executable… (Nouvel exécutable personnalisé) et sélectionnez le fichier de l'exécutable. Il devrait apparaître dans la section Executables du projet. En tant qu'unique exécutable du projet, il devient également l'exécutable actif et sera exécuté par défaut à chaque fois que vous souhaiterez exécuter votre projet.

Utilisez le menu Run > Run ou Run > Go pour le lancer.

7. Avantages et défauts

Le terme Défauts est au pluriel dans ce titre mais la méthode exposée précédemment n'en présente qu'un seul : le fichier .pro n'est pas actualisé automatiquement en cas de nouveaux ajouts de fichiers à votre projet.

Certes, il s'agit là d'un manque à combler dans l'intégration de Qt à Xcode mais en comparaison des nombreux avantages que présente notre méthode, cela n'est pas grand chose :

  • respect du standard instauré par Qt pour la compilation des projets ;
  • portabilité du fichier .pro d'une plate-forme à une autre ;
  • aucune contrainte au moment du passage à un autre IDE que Xcode ;
  • possibilité de modifier le projet Qt en dehors d'Xcode sans avoir à reconfigurer Xcode.

8. Conclusion

Comme toute chose, Xcode possède ses amateurs et ses détracteurs. En tant que produit Apple, il constitue un incontournable pour le développement d'applications natives Mac OS X. Bien que des environnements de développement portables spécifiques à Qt existent tels que MonkeyStudio, Edyuk ou encore QDevelop, les utilisateurs de Xcode trouveront peut-être un intérêt à éviter la multiplication des outils et nous espérons que ce tutoriel les aura aidé à améliorer leur entrée dans le monde de Qt.

Merci à Benj. pour la relecture orthographique de cet article !