Normalement, pour les numéros de version majeurs et mineurs (comme dans 1.2, 1 est majeur et 2 est mineur), ils sont le plus souvent écrits directement dans le code, généralement sous la forme #define
(parce que vous pourriez en avoir besoin pour les compilations conditionnelles, c'est-à-dire #if
blocs).
Vous auriez généralement un en-tête séparé contenant uniquement ces définitions et rien d'autre (à l'exception de l'en-tête de protection), afin de minimiser les dépendances.
Certaines personnes utilisent le système de construction (comme cmake) pour extraire un numéro de version du contrôle de version (git, svn, cvs, etc.) puis mettre ce numéro de version dans leur en-tête "version". Ou, ils mettent le numéro de version dans les fichiers de configuration du système de construction, puis le placent dans l'en-tête, comme indiqué dans le didacticiel cmake. Personnellement, je n'aime pas cette approche car elle a tendance à modifier trop souvent vos fichiers d'en-tête et à provoquer des recompilations fréquentes et inutiles.
Je préfère écrire le numéro de version dans le fichier d'en-tête, puis extraire ces numéros de version (majeur, mineur, ..) de l'en-tête sur le système de construction. C'est une autre chose que cmake peut très facilement faire.
Si vous souhaitez intégrer un numéro de version très quotidien dans votre logiciel, tel qu'un numéro de build ou un numéro de révision, vous ne devez pas le mettre sous la forme d'un #define
dans un fichier d'en-tête, mais plutôt comme un extern const
variable que vous définissez dans un fichier cpp. Par exemple, vous pouvez utiliser cmake pour extraire un numéro de révision de votre système de contrôle de version, le coller sur le fichier cpp qui définit ce extern const int revision;
variable (via le configure_file
de cmake function), et liez vos programmes avec ce fichier cpp / object. De cette façon, le numéro de révision est automatiquement intégré à vos programmes à chaque reconstruction, et il ne déclenchera pas de recompilations complètes à chaque mise à jour (c'est-à-dire à chaque validation).
Le fait est que les numéros de version majeurs et mineurs ne sont pas modifiés assez fréquemment pour nécessiter une maintenance automatique, mais vous devez les écrire manuellement à un seul endroit et les propager automatiquement partout où cela pourrait être pertinent (je recommanderais que cet endroit soit le fichier d'en-tête lui-même). Seuls les numéros de révision ou de build doivent être entièrement automatisés (générés par le contrôle de version et propagés partout ailleurs automatiquement).
Je crois qu'il est d'usage de conserver le numéro de version dans un fichier d'en-tête dédié. Certains outils peuvent le générer automatiquement pour vous.
Par exemple, consultez la section "Ajout d'un numéro de version et d'un fichier d'en-tête configuré" dans le didacticiel CMake.