Normalmente, para los números de versión mayor y menor (como en 1.2, 1 es mayor y 2 es menor), generalmente se escriben directamente en el código, generalmente como #define
(porque es posible que los necesite para compilaciones condicionales, es decir, #if
bloques).
Por lo general, tendría un encabezado separado que contiene solo esas definiciones y nada más (excepto la protección del encabezado), para minimizar las dependencias.
Algunas personas usan el sistema de compilación (como cmake) para obtener un número de versión del control de versiones (git, svn, cvs, etc.) y luego colocan ese número de versión en su encabezado de "versión". O bien, colocan el número de versión en los archivos de configuración del sistema de compilación y luego lo colocan en el encabezado, como se muestra en el tutorial de cmake. Personalmente, no me gusta este enfoque porque tiende a modificar los archivos de encabezado con demasiada frecuencia y provoca recompilaciones frecuentes y sin sentido.
Prefiero escribir el número de versión en el archivo de encabezado y luego extraer esos números de versión (mayor, menor, ...) del encabezado en el sistema de compilación. Esta es otra cosa que cmake puede hacer muy fácilmente.
Si desea incrustar un número de versión de día a día en su software, como un número de compilación o un número de revisión, entonces no debe ponerlo como un #define
en un archivo de encabezado, sino como un extern const
variable que defina en un archivo cpp. Por ejemplo, puede usar cmake para extraer un número de revisión de su sistema de control de versiones, agregarlo al archivo cpp que define este extern const int revision;
variable (a través de configure_file
de cmake función) y vincule sus programas con ese archivo cpp/objeto. De esta manera, el número de revisión se integra automáticamente en sus programas en cada reconstrucción y no desencadenará recompilaciones completas cada vez que se actualice (que es en cada confirmación).
El punto es que los números de versión principal y secundaria no se cambian con la frecuencia suficiente para requerir algún tipo de mantenimiento automático, pero debe escribirlos manualmente en un solo lugar y propagarlos automáticamente en cualquier otro lugar donde pueda ser relevante (recomendaría que este lugar sea el propio archivo de cabecera). Solo los números de revisión o compilación deben automatizarse por completo (generados por el control de versiones y propagados a todos los demás automáticamente).
Creo que es costumbre mantener el número de versión en un archivo de encabezado dedicado. Algunas herramientas pueden generar esto automáticamente para usted.
Por ejemplo, consulte la sección "Agregar un número de versión y un archivo de encabezado configurado" en el Tutorial de CMake.