2010-11-14 19 views
6

Je vais lancer un projet de logiciel à grande échelle impliquant une interface graphique multi-plateforme et un grand nombre de calculs croisés. Je prévois d'écrire la plupart des back-end de l'application en C++ et CUDA, et l'interface graphique en Qt4. Je prévois d'utiliser Make comme mon système de construction. Ce sera un projet qui n'aura que deux développeurs, et qui finira probablement par être un projet open source une fois que je serai relativement loin avec.Conseils/Ressources pour les projets de logiciel multiplateformes à grande échelle

Ma principale question est, est-ce que quelqu'un a des conseils/ressources pour développer l'architecture derrière le logiciel.

  • Quelle serait une bonne façon de structurer vos fichiers? (code crunching number dans un dossier séparé que le code gui, qui est séparé des exécutables compilés, ou autre chose?)
  • Comment le système de construction fonctionnerait-il pour les logiciels multiplateformes? Aurais-je besoin de configurer un système de construction différent pour chaque plate-forme, ou pourrais-je créer un "makefile" commun qui se construirait différemment en fonction de la plateforme qui l'invoquerait?
  • De quels types de modifications aurais-je besoin pour faire en sorte que mon code soit correctement construit sur toutes les plateformes (directives du pré-processeur, etc ...)?
  • Comment est-ce que quelqu'un gère le contrôle de révision pour de grands projets et l'intègre dans le système de construction afin que j'obtienne des numéros Version.Revision.Build qui se mettent à jour chaque fois que je construis mon projet?

J'ai été découragé par le fait que mon collège que je suis sur le point de terminer ne couvre presque rien de tout cela. À ce stade, j'ai fait beaucoup de recherches Google avec peu de chance sur ce dont j'ai besoin. Je ne demande pas à être nourri à la cuillère, je serais parfaitement content avec des liens vers des livres ou des sites web relatifs à cela.

J'ai fait la plupart de ces choses séparément, mais je n'ai jamais essayé de tout combiner en un seul gros paquet.

Quelqu'un peut-il recommander Release It!: Design and Deploy Production-Ready Software pour ce que je me renseigne?

+0

http://en.wikipedia.org/wiki/GNU_build_system – Anycorn

+0

Quelques Conseils sur les bibliothèques: (a) essayez d'obtenir autant de bibliothèques que possible comme code source et non binaires, (b) vérifiez les fichiers d'installation pertinents pour toutes les bibliothèques dans votre dépôt, (c) écrivez * des instructions de construction très prudentes pour chaque combinaison bibliothèque/plate-forme, de sorte qu'il n'y a aucune conjecture impliquée dans le processus de construction. Et sur une note séparée, soyez extraordinairement prudent pour éviter, par ex. chemins de codage en dur ou en s'appuyant sur les DLL étant dans le répertoire système de votre ordinateur, etc. Le but est de le rendre parfaitement portable entre les ordinateurs. –

+0

Si vous utilisez CMake (comme le suggérait Moo-Juice), cela vous facilitera la vie car il vous permettra de générer la solution Makefile/Visual Studio appropriée sur chaque plate-forme. Vous ne voulez pas entrer dans un Makefile séparé sur chaque plate-forme - c'est juste douloureux :) –

Répondre

2

1) La structure peut être la même, mais si vous incluez des fichiers dans des sous-répertoires, assurez-vous d'utiliser '/ et non \. Le premier travaillera également sur les fenêtres.

2) Je vérifierais cmake (http://www.cmake.org/) pour la gestion du bâtiment à travers plusieurs plates-formes. Cela vous demandera beaucoup de peine.

3) Utilisez STL et Boost autant que vous le pouvez. Ces bibliothèques ont été conçues en tenant compte de ce problème. Cela couvrira une grande partie de ce que vous pourriez avoir besoin de faire. Vous avez déjà choisi l'excellente bibliothèque Qt, donc votre interface graphique n'est pas un problème non plus. Avec ces 3 combinés, vous êtes déjà la plupart du temps là-bas. Cela dit, vous devrez peut-être faire quelque chose qui est indépendant de la plate-forme et qui n'est couvert par aucun d'entre eux. Pour cela, je vous suggère d'écrire une classe qui expose une interface cohérente sur toutes les plates-formes, et de cacher le nitty-gritty avec les directives du préprocesseur dans le fichier source. Il est impératif d'exposer une interface cohérente.

4) Utiliser SVN. Je ne sais pas comment le faire sur d'autres compilateurs, mais il est trivial dans Visual Studio pour obtenir la dernière révision et l'insérer dans un fichier qui est ensuite inclus dans votre projet. Vous pouvez utiliser des événements de génération pour cela. Désolé, je ne peux pas élaborer sur d'autres plates-formes.

En outre, si vous devez vous déplacer en dehors de STL, Boost, Qt, etc., tenez compte de la documentation des appels d'API sur toutes les plates-formes.J'ai été mordu dans le passé par le comportement d'un appel d'API fseek() qui a écrit des octets pour compléter la destination sur une implémentation, mais pas sur l'autre. Ceux-ci peuvent être une cause majeure de maux de tête et une autre raison d'essayer de s'en tenir à des bibliothèques testées et testées comme mentionné ci-dessus.

+0

Je voudrais appuyer la recommandation CMake - c'est excellent, et une bien meilleure option que Make IMHO. Un peu d'une courbe d'apprentissage (j'ai d'abord été rebuté), mais qui en valait vraiment la peine. –

0

Qt correspondra à vos reqs, IMO .. Je vais répondre avec correspondance à Qt.

En ce qui concerne la structure des fichiers, vous pouvez avoir les fichiers sources *.cpp et *.h dans un dossier, les bibliothèques restantes et les dépendances dans un autre dossier. Vous pouvez créer des fichiers *.ui en utilisant le concepteur Qt ou vous pouvez les coder directement. (Dans lequel le dernier augmentera considérablement le temps de compilation) Les fichiers générés (comme *.exe, *.obj, etc.) peuvent être placés dans un dossier séparé afin que votre système de fichiers semble cohérent. Il existe des moyens simples de faire tous ceux qui sont mentionnés ci-dessus dans Qt. En ce qui concerne la portabilité, vous pouvez facilement utiliser des applications Qt sur diverses plates-formes. Check out here ..

En ce qui concerne le contrôle de la source, je suis habitué à SVN et nous allons bien avec. Choisissez simplement celui qui répond à vos besoins.

Depuis que vous êtes sur le point d'obtenir votre diplôme, Qt a clairement certains avantages par rapport aux autres.

  1. A partir des liens que je vous ont été données, vous pourriez avoir compris que la documentation pour Qt est vaste et vous pouvez travailler sans beaucoup soutien professionnel.
  2. Et aussi le plus important Qt est en LGPL et vous pouvez jouer gratuitement ... :)

HTH ..