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?
Respuesta
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. 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. –
Gracias por la respuesta, voy a ir con este. Perdón por ser tan lento de aceptar. – Septagram
Además, @Dave, es verdad. – Septagram
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
- 1. mejores prácticas para administrar y cargar propiedades
- 2. Mejores prácticas para el control de versiones con proyectos múltiples
- 3. Mejores prácticas para la compatibilidad con versiones anteriores de API
- 4. ¿Herramientas/mejores prácticas para administrar dependencias de aplicaciones?
- 5. Control de versiones con las mejores prácticas de Google Docs?
- 6. Archivo simple con versiones de lanzamiento y depuración - Mejores prácticas
- 7. Diseño API: mejores prácticas y compatibilidad con múltiples versiones
- 8. Mejores prácticas para C#
- 9. Mejores prácticas para almacenar configuraciones
- 10. Mejores prácticas para usar git con CVS
- 11. ¿Mejores prácticas con JFrame Constructors?
- 12. Mejores prácticas para la depuración
- 13. ¿Mejores prácticas para API seguras?
- 14. Registro para ASP.NET - Mejores prácticas
- 15. ¿Mejores prácticas para autoguardar borradores?
- 16. Mejores prácticas para Magento Deployment
- 17. ¿Hay bibliotecas/frameworks para SCons?
- 18. Mejores prácticas de Maven
- 19. ¿Cuáles son las mejores prácticas para administrar conexiones de bases de datos en .NET?
- 20. ¿Cuáles son algunas de las mejores prácticas para administrar subprocesos de fondo en IIS?
- 21. Mejores prácticas para administrar y desplegar aplicaciones de JavaScript de gran tamaño
- 22. Mejores prácticas para el control de versiones para el desarrollo de Lotus Notes/Domino
- 23. Administrar versiones de hoja de cálculo
- 24. Mejores prácticas de Sitecore
- 25. Integración continua: mejores prácticas
- 26. NamedQuery: Mejores prácticas
- 27. DTO: mejores prácticas
- 28. CONEXIÓN SQL mejores prácticas
- 29. mejores prácticas de ctags
- 30. CSS Esquema mejores prácticas
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. –