32 votes

Meilleures pratiques pour le développement «multiplateforme» avec Qt

Selon qt.nokia.comQt est une "application multiplate-forme de l'INTERFACE et de cadre", vous permettant d'écrire du code une fois à la cible de multiples plates-formes". Le Qt SDK est un "environnement de développement complet" contenant "les outils nécessaires à la création de la croix-plate-forme d'applications avec Qt dans une installation unique". Qt Creator est un "cross-plate-forme de l'IDE" qui "fonctionne sur Windows, Linux/X11, et Mac OS X systèmes d'exploitation de bureau, et permet aux développeurs de créer des applications pour de multiples de bureau et les plates-formes mobiles."

La magie des mots "cross compilation" ne sont pas mentionnés explicitement ces site web notices. Néanmoins, un naïf lecteur pourrait être pardonné pour la déduction que vous pouvez télécharger le Qt SDK (y compris Qt Creator) pour tout système hôte que vous utilisez pour le développement, créer un projet, et écrire un peu de code à partir de laquelle vous pourrait facilement générer des exécutables pour Windows, Linux, Mac, etc. Par "facilement" que j'ai en tête quelque chose comme cochant certaines cases à cocher dans un build de dialogue des paramètres, et en appuyant sur le "Construire" bouton.

Je suis toujours à la recherche de ces cases! En attendant, j'ai trouvé différents postes, d'ici et d'ailleurs, à propos de l'installation d'un cross-compilateur, d'installer des binaires, la réécriture de votre fichier qmake, etc. De la commercialisation, j'ai attendu que la cross-compilation, ce serait déjà entièrement et directement pris en charge avec un "out-of-the-box" installation de l'IDE et des outils du kit SDK. Ai-je raté quelque chose d'évident?

Si pas, j'ai du développement des machines disponibles avec les trois systèmes d'exploitation. Devrais-je installer Qt Creator sur les trois plates-formes? Si je fais ça, je peux m'attendre à être en mesure de prendre un projet Qt (ou peut-être juste le code source) que j'ai développé à l'aide de Qt Creator pour Windows, de le copier sur mon Mac ou Linux de la machine, et de le construire en utilisant la version de Qt Creator pour cette plate-forme, sans se heurter à certains problèmes majeurs? Peut-être même la meilleure pratique pour l'utilisation de Qt pour créer des exécutables de plusieurs plates-formes, contre l'installation de la croix-des outils de compilation sur un seul développement de l'hôte?

22voto

Shinnok Points 2858

Qt slogan est:

Écrire une fois, compiler partout.

Avec cela à l'esprit, Qt n'est pas officiellement offrir à toute la solution de la boîte pour la croix de la compilation d'applications Qt à partir d'une plate-forme spécifique à d'autres plates-formes différentes. Bien que certainement en mesure, si beaucoup de travail et le temps investi, Qt bonne pratique commune vous suggère de construire votre application Qt directement sur la plateforme ciblée. Cela signifie que, d'acquérir de la cible de Windows pour votre application un un ordinateur Windows, votre Mac de la cible sur une machine Mac et Linux cible sur une, vous l'aurez deviné( :-) ), d'une machine Linux.

C'est "Écrire une fois, la compilation de tous", à mon avis, est très bien choisi une combinaison de mots. Sinon, la balise de ligne pourrait avoir été, "Écrire une fois, la compilation de tout".

En remontant à l'origine, vous n'avez même pas besoin de différentes machines physiques pour chacune des plates-formes cibles, étant donné que dans cette journée et l'âge de bonnes solutions de Virtualisation, vous pouvez facilement configurer un couple de machines virtuelles et de construire votre application sur différentes plates-formes à partir de la même machine physique.

Comme pour les autres questions qui ne sont pas directement répondu à votre question:

Devrais-je installer Qt Creator sur tous les trois plates-formes? Si je le fais, peut - Je m'attendre à être en mesure de prendre un Qt projet (ou peut-être juste la source le code) que j'ai développé à l'aide de Qt Creator pour Windows, copier sur mon Mac ou Linux de la machine, et construire la en utilisant la version de Qt Le créateur de cette plate-forme, sans en cours d'exécution dans certains grands problèmes?

Oui. Des problèmes mineurs sont des choses comme obtenir vos applications exécutables/binaries icônes à droite sur les trois principales plates-formes(Windows, Linux, Mac) ou le Dock Mac avancée de l'intégration ou de la barre des problèmes d'Intégration entre les deux. Ces questions peuvent être traitées sans rupture de la croix-plate-forme caractéristique de votre code, par encapsulation de votre plate-forme de code spécifique dans les directives du compilateur comme des #define pour eg. Je recommande également le faire pour tous les autres plate-forme spécifique de code de votre application requiert ou si vous allez faire un large usage de la plate-forme de code spécifique, la séparation des blocs entiers de la plate-forme associée à un code spécifique dans plusieurs dynamiques bibliothèques chargées(ou bibliothèques partagées) spécifiques à chaque plate-forme, mais l'exportation de la même abstraite générique de l'interface de chargement et de lier à eux en tant que de besoin.

Peut-être même la meilleure pratique pour l'utilisation de Qt pour créer des exécutables pour plusieurs plates-formes, contre l'installation de la cross-compilation d'outils sur un seul le développement de l'hôte?

Vous devez utiliser le Qt SDK(Qt Creator ou les outils en ligne de commande) pour la construction de votre demande dans la mesure du possible, depuis des outils comme qmake prendra la charge de la manutention .moc manuellement les fichiers dans votre Makefile. Mais si cela devient impossible pour plusieurs raisons que ce soit, par exemple. comme votre entreprise imposant de développement Visual Studio(cross platform hein?), il existe de nombreux tutoriels sur la façon de gérer Qt en fonction construit à l'aide de systèmes de construction comme MS Visual Studio, GNU autotools ou CMake. Bien que je recommande de coller avec qmake, ce qui est une bonne "faire makefile" générateur et facilement adaptable à tout ce que plate-forme spécifique des hacks que vous pourriez avoir besoin pour votre demande de construire à droite, plutôt qu'à l'aide d'un système de construction qui est plus à l'aise à la plate-forme spécifique hacks, puis en essayant de tenir compte de l'intervalle Qt besoins de ces systèmes de construction. Après tout, si vous développez votre application en Qt pour la croix-plate-forme de raisons, alors Qt devrait être le principal cadre de votre demande et de ne pas la plate-forme api spécifique/code ou de bibliothèques tierces que vous pourriez utiliser.

J'espère avoir été assez clair et utile.

PS: je suis aussi la bienvenue à des suggestions ou des corrections/ajouts concernant ce que j'ai écrit dans les commentaires.

6voto

ismail Points 19146

Vous pouvez utiliser MinGW pour effectuer une compilation croisée sur Linux pour Windows. La compilation croisée sur Mac n'est pas possible en raison de problèmes techniques. Il n'y a pas de moyen facile de le faire à partir de l'interface graphique, mais voici un bon guide sur la compilation croisée de QtWebKit pour Windows. Cela peut être appliqué à n'importe quel projet Qt.

3voto

6502 Points 42700

Je ne pense pas qu'il y est un cross-compiler configuration.

Au sujet de la portabilité de l'ensemble de ce projet je dis "presque" parce que je l'ai trouvé un peu de soucis. Pas moins de votre code source sera de 100% portable et de le recompiler sur une autre plate-forme aura juste besoin de quelques trucs dans le .pro.

Ce que je fais, c'est de travailler avec une plate-forme (Linux) et chaque maintenant et puis compiler à l'aide de ma machine Windows et mon Mac Mini. Ce que j'ai l'habitude de finir les combats sont juste quelques directives sur la façon de trouver des bibliothèques externes ou des fichiers à inclure. Aussi lorsque vous travaillez sur Mac, j'ai copier les fichiers externes dans l'app bundle afin que le programme puisse les trouver.

2voto

Pablo Points 44881

La dernière fois que j'utilisais Qt, et c'était il y a des années, vous deviez compiler sur chaque plateforme pour laquelle vous vouliez un binaire. Bien sûr, vous pouvez effectuer une compilation croisée, mais je pense que ce serait à vous de configurer une telle chose.

Peut-être que quelqu'un d'autre vous posera une meilleure question, mais je ne pense pas qu'il vous manque quelque chose.

2voto

Stephen Chu Points 8440

Je ne sais pas sur les systèmes Linux. Mais pour le développement de Qt application ciblant Mac OS X et Windows, vous avez besoin d'une machine de développement pour chacun d'eux. Il n'y a pas de cross-compilation pour les deux.

Qt est multi-plate-forme dans le sens où la même source, les fichiers peuvent construire application pour les différentes plates-formes. Avec tous les ordinateurs virtuels disponibles, un (physique) installation de la machine à développer et à construire plusieurs cibles ne devrait pas être trop de problème. En fait, c'est exactement ce que je suis en train de travailler sur mon projet en cours qui vise à la fois Windows et Mac.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X