2011-03-11 9 views
6

Me gustaría que mi aplicación Qt/C++ supiera de qué versión se trata. Debe saber que no proviene de algunos archivos de configuración, pero con el número de versión compilado en la aplicación binaria. Una versión en sí es una cadena como "XYZ", donde X es un número de versión principal, Y es un número de versión menor y Z es una revisión bajo SVN (o un número de revisión bajo SVN menos un número de revisión cuando salió la versión "XY0") ¿Cuál crees que es la forma más simple de lograr esto con scons?¿Mejores prácticas para administrar versiones con scons?

+1

Si el único propósito del número de versión es para mostrar algo para el usuario, una cadena está bien. Si hay algún acceso programático, querrá tener cada uno de los componentes de la versión en un campo separado (vea http://stackoverflow.com/questions/2195573/why-use-a-nested-ruby-module-for-version- información/2195824 # 2195824). También para facilitar la automatización de los incrementos de versión (por ejemplo, para un script de compilación de lanzamiento), separar la versión en campos es una gran ventaja. –

Respuesta

8

SCons tiene constructores Substfile y Textfile para generar archivos. Así que crea una función para calcular la versión (usando pysvn o llamando al comando svn) y escribe su salida en un archivo usando Substfile (toma la plantilla de un archivo) o Textfile (solo escribe el contenido provisto). Luego de compilar y vincular ese archivo con el resto de la aplicación.

El archivo debe ser un archivo fuente (no una cabecera) con contenido como (asumiendo C/C++, pero la misma técnica sería apropiado con cualquier lenguaje):

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

(y cualquier otro formatos alternativos que desee) y declarar

extern char *VERSION; 

en alguna parte, que sólo el archivo de uno se volverá a compilar más la aplicación relinked (que lo hará de todos modos, debido a que algunas otras fuentes, probablemente cambiaron demasiado, derecha).

+1

+1. Poner los valores de versión en un archivo fuente es una buena idea. Me parece útil hacer un encabezado (que no necesita ser modificado) con funciones de acceso para 1. la cadena de versión, y 2. una estructura de versión con campos separados para valores mayores, menores, etc. –

+0

Gracias por la respuesta, voy a ir con este. Perdón por ser tan lento de aceptar. – Septagram

+0

Además, @Dave, es verdad. – Septagram

1

Aquí hay algunas respuestas más que provienen de la lista de correo de [scons-users].

Brian Cody:

Una de las opciones de línea de comandos pasamos a scons es la versión del repositorio SVN del representante. Luego ponemos este número en a define (-DREP_NUM = \ "123 \") y compilamos una cadena en nuestro código C++ que usa este número. Eso es para nuestro servidor ejecutar compilaciones. Para construcciones locales, que en realidad usamos el nombre de usuario en lugar del número de versión , porque alguien es acumulación local de la versión XYZ no necesariamente igual de otra persona XYZ (en Windows, el nombre de env var contiene el usuario conectado) Una otra consideración es que cambiar cualquier parte de una declaración de compilación en scons significa que el objetivo es automáticamente desactualizado. Para trabajar en este problema, nuestro sistema de compilación selecciona el objetivo de un objeto que realmente se preocupa por los indicadores y solo pasa los indicadores a la compilación de ese objeto.

Buena suerte

Gary Oberbrunner:

Me gustaría que mi aplicación para saber qué versión es Qt/C++.

Hay un poco de información en http://www.scons.org/wiki/BuildNumberProcessing que puede ser útil.

- - Gary

Cuestiones relacionadas