2011-03-11 3 views
6

Je voudrais que mon application Qt/C++ sache de quelle version il s'agit. Il devrait savoir que non de certains fichiers de configuration, mais avec le numéro de version compilé dans l'application binaire. Une version elle-même est une chaîne comme "XYZ", où X est un numéro de version majeur, Y est un numéro de version mineur et Z est une révision sous SVN (ou un numéro de révision sous SVN moins un numéro de révision lorsque la version "XY0" est sortie). Que penseriez-vous est le moyen le plus simple d'accomplir cela avec des scons?Meilleures pratiques pour gérer les versions avec Scons?

+1

Si le seul but du numéro de version est d'afficher quelque chose à l'utilisateur, une chaîne est OK. S'il y a un accès par programme, vous voudrez avoir chacun des composants de la version dans un champ séparé (voir http://stackoverflow.com/questions/2195573/why-use-a-nested-ruby-module-for-version- information/2195824 # 2195824). Aussi, pour faciliter l'automatisation des incréments de version (par exemple pour un script de génération de version), séparer la version en champs est un gain. –

Répondre

8

SCons a Substfile et Textfile pour générer des fichiers. Créez donc une fonction pour calculer la version (en utilisant pysvn ou en appelant la commande svn) et écrivez la sortie dans un fichier en utilisant Substfile (prend le modèle d'un fichier) ou Textfile (écrit juste le contenu fourni). Compilez et liez ce fichier avec le reste de l'application.

Le fichier doit être un fichier source (pas un en-tête) avec un contenu similaire (en supposant C/C++, mais la même technique serait appropriée avec une langue):

char *VERSION = "X.Y.Z"; 

(et tout autre d'autres formats que vous voulez) et juger

extern char *VERSION; 

quelque part, que seul le seul fichier sera recompilé ainsi que l'application Relinked (ce qui sera de toute façon, parce que d'autres sources a probablement changé aussi, à droite).

+1

+1. Mettre les valeurs de version dans un fichier source est une bonne idée. Je trouve utile de faire un en-tête (qui n'a pas besoin d'être modifié) avec des fonctions accesseur pour 1. la chaîne de version, et 2. une structure de version avec des champs séparés pour les valeurs majeures, mineures, etc. –

+0

Merci pour la réponse, je vais aller avec celui-ci. Désolé d'être si lent à accepter. – Septagram

+0

Aussi, @Dave, vous avez raison. – Septagram

1

Voici d'autres réponses provenant de la liste de diffusion [scons-users].

Brian Cody:

Une option de ligne de commande que nous passons en scons est la version du référentiel du représentant SVN . Nous mettons ensuite ce nombre dans a define (-DREP_NUM = \ "123 \") et construisons une chaîne dans notre code C++ qui utilise ce nombre. C'est pour notre serveur exécuter builds. Pour builds locale, nous avons en fait utiliser le nom d'utilisateur au lieu du numéro de version , parce que quelqu'un est construction locale de la version XYZ ne nécessairement égal quelqu'un XYZ d'autre (dans les fenêtres, le var env USERNAME contient l'utilisateur connecté). Un autre considération est que la modification n'importe quelle partie d'une instruction de compilation dans scons signifie que la cible est automatiquement obsolète. Pour travailler autour de ce problème notre système de construction sélectionne la cible d'un objet que se soucie réellement des drapeaux et il seulement passe les drapeaux à la compilation de cet objet.

Bonne chance

Gary Oberbrunner:

Je voudrais que mon application Qt/C++ pour savoir quelle version il est.

Il y a quelques informations à http://www.scons.org/wiki/BuildNumberProcessing qui peut être utile.

- - Gary

Questions connexes