Nous avons une poignée de développeurs travaillant sur une non-commerciale (lecture: juste pour le plaisir) Projet C ++ multiplate-forme. Nous avons déjà identifié toutes les bibliothèques inter-plateformes dont nous aurons besoin. Cependant, certains de nos développeurs préfèrent utiliser Microsoft Visual C ++ 2008, d'autres préfèrent que les EMACS se trouvent à GNU / Linux. Nous vous demandons si cela est possible pour nous tous travailler plus ou moins simultanément sur les deux environnements, à partir du même référentiel de code. En fin de compte, nous voulons que le projet compilait proprement sur les deux plates-formes dès le début. P>
L'un de nos développeurs est heureux de passer à l'autre environnement si cela n'est pas possible. Nous utilisons tous à la fois Linux et Windows sur une base régulière et profiter des deux, il ne s'agit donc pas d'essayer d'éduquer un seft sur les vertus de l'autre plate-forme. Il s'agit de chacun de nous étant capable de développer dans l'environnement que nous apprécions tout encore encore de collaborer sur un projet amusant. P>
Toute suggestion ou expériences à partager? P>
13 Réponses :
Utilisez CUKE pour gérer vos fichiers de construction. P>
Cela vous permettra de configurer un seul référentiel, avec un ensemble de fichiers texte. Chaque dev peut ensuite exécuter les scripts de cmake appropriés pour construire l'environnement de construction correct pour son système (Visual Studio 2008/2005 / GNU C ++ Construire des scripts / etc.). P>
Il y a beaucoup d'avantages ici: P>
J'aime cette suggestion, malgré mon dédain occasionnel de la syntaxe Makefile. Je prendrais cette étape supplémentaire (peut-être que c'est déjà implicite) et vous suggérez de configurer CI Constrations pour chaque plate-forme que vous ciblez. Cela vous permet d'identifier rapidement les changements de construction. Il existe de nombreux serveurs CI là-bas - j'ai utilisé Hudson à cet effet avec succès plusieurs fois.
Si vous utilisez CMAKE, il est très facile de l'intégrer avec Cadash - qui vous permet de faire CI ou de la nuit sur plusieurs plates-formes distribuées, et de donner une belle interface Web propre: CDASH.org
@MIKE: La syntaxe de Clake est également plus propre que la syntaxe de fabrication de maquillage, IMO - et élimine complètement tout besoin de toucher des maquillages - il les générera pour vous, si vous choisissez ce générateur (bien que j'utilise habituellement les générateurs ciblant des IDES)
Nous avons utilisé CMAKE pour ce type de développement pendant plus d'un an. C'est brillant. Je l'utilise pour le développement de Windows uniquement, la syntaxe est facile et il est beaucoup plus facile de refacturer votre structure de projet avec une cmake dans toutes les boîtes de dialogue dans VC ++. L'une de ses fonctionnalités les plus nucléaires est que vous pouvez abstraiter les chemins communs / chemins de liaison, les définitions de préprocesseur et les bibliothèques, elles sont donc spécifiées à un endroit pour tous les projets de la solution. Ensuite, la modification de l'une d'entre elles devient facile, plus de modification de 20 fichiers de projet avec un éditeur de texte.
Le problème ne modifie pas vraiment les fichiers source C ++, mais le processus de construction lui-même. Vs n'utilise pas la même architecture de Makefile que le développement Linux le fait généralement. Une suggestion radicale, mais les deux groupes pourraient en réalité utiliser le même processus d'IDE C ++ et de construction - voir code :: blocks Pour plus d'informations. P>
Mais cela peut faire: créer un projet de makefile, et il exécutera une ligne de commande que vous voudriez (pas seulement NMake, bien que ce soit la valeur par défaut).
Je ne pense pas que les gens céderaient cela si facilement, comme pour certaines personnes, le choix de l'éditeur semble avoir la même importance que, par exemple, le choix de la religion. Ce problème a suscité des guerres virtuelles sur les internets, alors veuillez vous soucier de ce que vous suggérez! Nous ne voulons pas avoir le culte de VI mars contre l'église d'Emacs! (Bien que nous sachions que le culte vaincre facilement l'église) PS: Ne prenez pas cela trop sérieux, gardez simplement à l'esprit que la plupart des développeurs n'abandonneront pas leurs éditeurs bien-aimés qui sont faciles :)
Eh bien, la suggestion n'était pas si sérieuse - je sais ce que sont les utilisateurs d'Emacs :-)
Ceci est possible (je fais cela pour gagner mon argent quotidien :-)). P>
Mais vous devez garder à l'esprit les différences dans les bibliothèques fournies par le système d'exploitation qui pourraient être très ennuyeuses. Deux bonnes options pour se déplacer qui sont boost et qt. P>
Vous fournissez les deux avec des fonctions indépendantes de la plate-forme de substances utiles qui ne sont pas traitées par le C Lib et la STL. P>
J'utilise personnellement CMAKE / MINGW32 / QT4 pour tous mes besoins de mon C ++. QTCreator est une IDE crossplateform qui est quelque peu optimisée pour la programmation QT4. P>
Je l'ai fait et je l'ai vu fait sans trop de problèmes. p>
Vous voudrez essayer d'isoler le code différent pour les différentes plates-formes. De plus, vous voudrez réfléchir à votre Fondamentalement, vous voulez juste être vraiment clair ce qui est spécifique à chaque système et ce qui est courant. P>
Aussi, tests unitaires strong> va être vraiment important car il peut y avoir une différence mineure et que vous souhaitez faciliter la gestion des tests pour que le code Linux fonctionne comme prévu. et l'inverse. p>
Aussi +1 pour les tests d'unités. Notez que cela signifie que vous devez vous assurer que votre framework de test unitaire est également multiplate-forme - évitez le nouveau cadre de test de l'unité C ++ intégré à VS2012, par exemple.
Je l'ai fait de deux manières: p>
Je ne peux pas dire que j'ai vraiment aimé Clake, mais un outil multi-plate-forme a certainement ses avantages. p>
Généralement, en utilisant différents compilateurs pour compiler votre code à partir des toutes premières lignes, c'est toujours une bonne idée, car elle aide à améliorer la qualité du code. p>
J'ai eu une telle expérience de travail à Acronis. Nous avons eu le même codebase utilisé pour construire des fichiers binaires (installateurs entièrement emballés, réellement ciblant Win32 / 64, Linux et OS X (et un groupe d'autres plates-formes plus exotiques, telles que l'EFI), avec tout le monde travaillant dans leur IDE de choix. L'astuce ici consiste ici à éviter des solutions spécifiques à compilateur et à l'IDE et à rendre votre projet entièrement construisable à partir de plate-forme croisée propre à créer des fichiers. Notez que vous pouvez parfaitement utiliser n'importe quel système de fabrication avec VC ++, ce n'est donc pas un problème (nous avons utilisé Watcom faire pour des raisons historiques, mais je ne le recommanderais pas). P>
Une autre chose que vous puissiez faire est d'ajouter un script de fabrication qui produit automatiquement des fichiers de projet dans les listes d'entrée de vos maquillages, pour tous les IDES que vous utilisez (E.G. VS et ECLIPSE CDT). De cette façon, chaque développeur génère ce genre de choses pour lui-même, puis ouvre ces projets en IDE à éditer / construire / déboguer, mais le référentiel source n'a que des fabricants de fabrication. P>
S'assurer que le code est compilable pour tout le monde peut être un problème, principalement parce que VC ++ est généralement plus lax en appliquant les règles que g ++ (par exemple, il vous permettra de lier une ruerve à une référence non constituée, bien qu'avec un avertissement. ). Si vous compilez avec des avertissements de traite comme des erreurs et des niveaux d'alerte les plus élevés (avec peut-être quelques avertissements choisis à la main désactivé), vous éviterez la plupart du temps à cela. Avoir une installation de construction de roulement contiguë est une autre façon d'attraper ces premiers. Une autre approche que nous avons utilisée dans Acronis est de disposer de l'environnement Windows Building dispose d'outils de compilation croisée à base de cygwin, de sorte que tout windows Dev pourrait faire une cible de cible de construction (avec la même version g ++ et tout) de sa boîte, et voir si cela échoue, pour vérifier que ses modifications compileront en G ++. P>
Comme mentionné dans les messages précédents, QT est une méthode très facile pour faire un véritable développement multi-plateformes simultané - indépendamment de votre IDE et avec de nombreux compilateurs différents (même pour Symbian, bras, Windows CE / Mobile ...). < / p>
Dans ma dernière et la société actuelle, je travaille dans des équipes mixtes de développeur de Linux et de Windows, qui travaillent ensemble à l'aide de Subversion et de Qt (qui possède un système de construction très simple et puissant "QMake", qui cache toutes les différentes plate-forme / Environnements de construction spécifiques au compilateur - Vous devez simplement écrire un fichier de construction em> pour toutes les plates-formes em> - si facile!). P>
et: QT contient presque tout ce dont vous avez besoin: p>
Qt est donc un environnement complet et très fiable - je l'utilise depuis 10 ans. P>
et: QT s'intègre de manière transparente dans les IDes comme VC ++, Eclipse ou fournit à son propre IDE "QTCreator". P>
Voir: http://www.trolltech.com + http://doc.trolltech.com p>
meilleures salutations,
Chris P>
Un autre vote pour CMAKE.
Une chose à surveiller, les noms de fichiers sont en chambré mais pas sensible à la casse sur Windows. Ils sont sensibles à la caisse sur la plupart des systèmes de fichiers UNIX.
C'est généralement un problème avec #include p>
par exemple. Compte tenu d'un fichier foobar.h p>
Je suis d'accord avec tout le monde ici qui a suggéré Cumake pour le développement de la plateforme croisée en C ++. C'est un excellent outil. p>
Une autre chose que je suggérerais, c'est d'utiliser Eclipse CDT comme environnement de développement. Cela fonctionne dans n'importe quel endroit où vous pouvez exécuter Java un GCC et qui unifie votre environnement de développement. P>
Je pense que c'était Alan Jackson qui a mis l'accent sur le test de l'unité. Pour ce faire, vous auriez besoin de certaines bibliothèques de test d'unité multiplate-forme. J'ai lu cette POST Il y a longtemps concernant les cadres de test unitaires C ++. C'est un peu obsolète mais réfléchi. Celui qui manque également dans les deux plateformes est Googletest . P>
Enfin, si vous souhaitez exécuter ces tests automatiquement dans les deux plates-formes CMAKE, un autre outil appelé ctest est très bon pour le faire. P>
Nous travaillons également sur un projet multi-plateformes. Nous utilisons EMACS pour coder, SCONS pour construire et Visual Studio 2008 pour déboguer. C'est mon 1ère fois en utilisant Emacs + Swons et je dois dire que c'est très très astucieux une fois que vous avez compris comment fonctionne les sconstriques et les sconscripts. P>
Je suis en retard sur cette question et il y a beaucoup de bonnes réponses ici, mais je n'ai vu personne énumérer toutes les questions que j'ai rencontrées (la plupart de mes travaux en C ++ sont et ont été croisés. plate-forme), donc: p>
Malgré tout ce qui précède: une plate-forme inter-plate-forme globale est assez faisable et il n'y a pas de vraie raison de l'éviter. Mon expérience est que les problèmes tendent à contourner de manière sporadique, mais quand ils prennent plus de temps de temps. Si vous programmez un moment, mais vous ne trouvez pas cet inhabituel. P>
Découvrez Premake Premake ... il est assez similaire à cmake mais écrit à l'aide de Lua. P>
J'en ai utilisé cela sur un certain nombre de projets de développement et je trouve facile d'apprendre et d'intégrer et d'intégrer dans les structures de la société et des projets existantes. P>
Essayez! P>