correct façon de coder/embed numéro de version de code de programme
Je voudrais intégrer ma version du logiciel dans mon code et le récupérer plus tard à partir du programme binaire avec une commande comme argument comme -v
ou --version
. Comme exemple certaines de GNU/Linux logiciel binaires imprimer leur version de l'information lorsqu'elle est fournie avec un -v
ou -V
argument dans la ligne de commande de prendre ls
comme un exemple:
$ ls --version
ls (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Est-il une convention ou d'un standard de le faire? J'ai essayé de rechercher ces informations, mais depuis que je ne connaissais pas le droit de terminologie ma recherche a abouti dans le contrôle de version howto. Le code du logiciel est écrit en langage C++ si elle permet de résoudre le problème.
OriginalL'auteur Barracuda | 2014-12-10
Vous devez vous connecter pour publier un commentaire.
Normalement, pour les majeurs et mineurs numéros de version (comme dans, 1.2, 1 est majeur et 2 est mineur), ils sont le plus souvent écrits dans le code directement, le plus souvent comme un
#define
(parce que vous pourriez avoir besoin de leur conditionnelle des compilations, c'est à dire,#if
blocs).Vous aurait généralement séparé en-tête qui contient uniquement les définit et rien d'autre (à l'exception de l'en-tête de la garde), afin de minimiser les dépendances.
Certaines personnes utilisent le système de construction (comme cmake) pour tirer un numéro de version à partir du contrôle de version (git, svn, cvs, etc..) et ensuite placer ce numéro de version dans leur "version" en-tête. Ou, ils ont mis le numéro de version du système de génération des fichiers de configuration et puis mettre ça sur la tête, comme illustré sur la cmake tutoriel. Personnellement, je n'aime pas cette approche car elle tend à modifier vos fichiers d'en-tête, trop souvent, et de provoquer de fréquentes et inutiles recompilations.
Je préfère écrire le numéro de version dans le fichier d'en-tête, puis en la tirant hors de ces numéros de version (majeur, mineur, ..) à partir de l'en-tête sur la construction du système. C'est une autre chose que cmake peut très facilement le faire.
Si vous souhaitez intégrer un jour-par-jour le numéro de version de votre logiciel, tel qu'un numéro de version ou le numéro de révision, alors vous ne devriez pas mettre comme
#define
dans un fichier d'en-tête, mais plutôt comme unextern const
variables que vous définissez dans un fichier cpp. Par exemple, vous pouvez utiliser cmake pour tirer un numéro de révision de votre système de contrôle de version, la sellerie que sur le fichier cpp qui définit cetteextern const int revision;
variable (par cmake estconfigure_file
fonction), et le lien de vos programmes avec le rpc /fichier de l'objet. De cette façon, le numéro de révision est intégré dans vos programmes automatiquement à chaque re-construire, et il ne se déclenche pas plein comme à chaque fois qu'il est mis à jour (ce qui est à chaque commit).Le point est que, majeur et mineur, les numéros de version ne sont pas changés assez souvent pour exiger tout type de maintenance automatique, mais vous devez manuellement les écrire dans un seul endroit, et automatiquement le propager partout ailleurs où il pourrait être pertinent (je vous recommande ce lieu l'en-tête de fichier lui-même). C'est seulement à la révision ou à construire les nombres qui doivent être entièrement automatisé (généré par le contrôle de version, et propagé partout ailleurs automatiquement).
OriginalL'auteur Mikael Persson
Je crois qu'il est de coutume de garder le numéro de version dans un fichier d'en-tête. Certains outils peuvent générer automatiquement pour vous. Par exemple, voici comment vous le faites avec CMake:
http://www.cmake.org/cmake-tutorial/
Voir la section "Ajout d'un Numéro de Version et Configuré le Fichier d'en-Tête"
OriginalL'auteur Gábor Angyal