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?
Répondre
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. 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. –
Merci pour la réponse, je vais aller avec celui-ci. Désolé d'être si lent à accepter. – Septagram
Aussi, @Dave, vous avez raison. – Septagram
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
- 1. Les meilleures pratiques pour gérer les exceptions
- 2. Meilleures pratiques pour gérer les données JSON pour API SDK
- 3. Quelles sont les meilleures pratiques pour gérer plusieurs versions d'un projet?
- 4. Quelles sont les meilleures pratiques pour gérer les informations sensibles?
- 5. Meilleures pratiques pour la gestion des versions de texte
- 6. Meilleures pratiques pour gérer plusieurs pressions sur les boutons
- 7. Meilleures pratiques pour gérer des symboles de binaires
- 8. Meilleures pratiques Android Meilleures pratiques
- 9. Meilleures pratiques pour travailler avec des devises
- 10. Meilleures pratiques pour les chaînes de connexion
- 11. Meilleures pratiques pour l'internationalisation avec PyQt4
- 12. Exceptions - Les meilleures pratiques
- 13. Appcelerator. Gérer l'utilisation de la mémoire. Les meilleures pratiques
- 14. Meilleures pratiques pour Python UnicodeDecodeError
- 15. meilleures pratiques pour gérer l'erreur dans l'application multilingue
- 16. Meilleures pratiques UDDI
- 17. Meilleures pratiques pour tester les installations MSI
- 18. Meilleures pratiques pour les comptes non enregistrables
- 19. Meilleures pratiques pour Axis2 avec Maven
- 20. Meilleures pratiques pour les serveurs Android
- 21. Meilleures pratiques pour organiser l'authentification avec Axis2
- 22. Meilleures pratiques pour les références JavaScript IntelliSense
- 23. Les meilleures pratiques pour le menu gonfleur
- 24. Les meilleures pratiques pour ma solution
- 25. CSS meilleures pratiques pour les portlets
- 26. Référence pour les meilleures pratiques Prolog?
- 27. Meilleures pratiques pour les traites d'enregistrement automatique?
- 28. Meilleures pratiques pour les clés privées personnelles
- 29. Meilleures pratiques Maven: y compris les horodatages pour les versions instantanées ou non?
- 30. Meilleures pratiques pour Entity Framework?
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. –