Crear nùmero de Versiòn de Aplicaciòn con QMake

Cuando estamos desarrollando software, ya sea un programa o aplicaciòn, es necesario asignarle a cada reproducciòn o nueva compilaciòn de dicho programa, un nùmero ùnico de versiòn.

Dependiendo en que entorno estemos realizando el desarrollo, debemos generar o crear el nùmero de versiòn. Este nùmero, debe contar con algunas caracterìsticas que no deberiamos omitir. Una caractarìstica es que siempre debe ser superior que el nùmero generado anteriormente para el mismo software. Una caractarìstica no es obligatoria pero es recomendable es que el nùmero de versiòn nos deberìa indicar de algùn modo cierta informaciòn que haga referencia a el momento, año, etapa o serie en la que ha sido creado el programa desarrollado conjuntamente con el nùmero de versiòn.

Veamos còmo hacer esto en el Framework Qt

En el caso de que estemos utilizando el Framework Qt, una manera de generar numeros de control de versiòn desde qmake, es utilizando un còdigo como el siguiente:

VERSION_YEAR=2016
VERSION_MAJ1=$$system(date +%Y)
win32 {
    VERSION_MAJ= $$system("set /a $$VERSION_MAJ1 - $$VERSION_YEAR")
    VERSION_MEN1= $$system("set /a $$system(date +%m) + $$system(date +%d) + $$system(date +%H) + $$system(date +%M)")
} else:unix {
    VERSION_MAJ= $$system("echo $(($$VERSION_MAJ1 - $$VERSION_YEAR))")
    VERSION_MEN1= $$system("echo $(($$system(date +%m) + $$system(date +%d) + $$system(date +%H) + $$system(date +%M)))")
}
greaterThan(VERSION_MEN1, 99){
    VERSION_MEN2=$$VERSION_MEN1
}else{
    VERSION_MEN2=0$$VERSION_MEN1
}
APPVERSION=$$VERSION_MAJ"."$$system(date +%W)$$VERSION_MEN2
message(App Version $$APPVERSION)
write_file($$PWD/version, APPVERSION)

Este còdigo qmake generarà una variable en cada momento de compilaciòn de nuestra aplicaciòn, para ser màs especìfico, digamos que este còdigo se ejecutarà cada vez que se ejecute qmake. No confundirse con la ejecuciòn sin compilaciòn que qmake realiza cada vez que guardamos cambios en el archivo del proyecto (.pro) y se realiza la emisiòn de la salida de mensajes en el panel issue. Solamente con guardar este còdigo qmake en el IDE Qt, esto no basta. Para ejecutar de manera plena este còdigo es necesario compilar el proyecto.

El nùmero generado lo he estructurado con 3 valores del siguiente modo.

Numero 1: Años trasncurridos desde el inicio del proyecto
Numero 2: Nùmero de semana
Numero 3: Nùmero resultante de la suma del mes actual, hora actual y minuto actual.

Ejemplo: versiòn 2.29077

Este nùmero de versiòn representa lo siguiente. La compilaciòn se realizò el tercer año (dependiendo si queremos comenzar desde la versiòn 0 o 1), en la semana 29, el dìa 30 a la hora 20 con 27 minutos (30+20+27=77).

Este mètodo nos posibilita diferenciar un numero de versiòn de otro a cada minuto.

Explicaciòn del còdigo

Creamos la variable VERSION_YEAR y la definimos en el año en que comenzò a desarrollarse el proyecto.

Creamos la variable VERSION_MAJ1 con el valor del año actual.

Creamos la variable VERSION_MAJ que es la diferencia entre la dos primeras variables creadas.

Creamos la variable VERSION_MEN1 con el valor total de la suma del mes, hora y minutos actuales.

Utilizamos el mètodo greaterThan() de qmake para comparar si el valor VERSION_MEN1 es mayor que 100. Esto agregarà un dìgito 0 cero a la derecha de una nueva variable llamada VERSION_MEN2 en el caso de que VERSION_MEN1 sea menor que 100.

Creamos la variable APPVERSION con el string final de la versiòn.

Con el mètodo message(App Version $$APPVERSION) mostramos un mensaje en la salida de qmake.

Por ùltimo, utilizamos el mètodo write_file($$PWD/version, APPVERSION) para crear un archivo llamado "version" en la carpeta del proyecto. La variable $$PWD nos devuelve la ruta absoluta del proyecto.

Actualizacion: Para Windows he modificado algunas cosas.
Aquì dejo el còdigo.


VERSION_YEAR=2016
win32 {
    VERSION_MAJ1=$$system("echo  %date%")
    VERSION_MAJ2 =$$split(VERSION_MAJ1, "/")#07 08 2018
    VERSION_MAJ3 =$$member(VERSION_MAJ2, 2)
    VERSION_MAJ4 =$$split(VERSION_MAJ3, "")
    VERSION_MAJ5 =$$member(VERSION_MAJ4, 2)
    VERSION_MAJ6 =$$member(VERSION_MAJ4, 3)
    VERSION_MAJ7=$$system("set /a  $$VERSION_MAJ3 - $$VERSION_YEAR")

    MDIA1=$$member(VERSION_MAJ2, 0)
    MDIA2=$$split(MDIA1, "")
    MDIA3=$$member(MDIA2, 0)
    greaterThan(MDIA3, 9){
        MDIA4=$$MDIA3
    }else{
        MDIA4=$$member(MDIA2, 1)
    }
    VERSION_MEN1=$$system("echo  %time%")
    VERSION_MEN2 =$$split(VERSION_MEN1, ":")#07 08 2018
    VERSION_MEN3 =$$member(VERSION_MEN2, 1)
    VERSION_MEN4=$$system("resources\\week.bat $$MDIA4 $$member(VERSION_MAJ2, 1) $$member(VERSION_MAJ2, 2)")
    NUMWEEK=$$system("set /a  $$VERSION_MEN4 + 1")

    #message(Date: $$MDIA1)
    #message(Month: $$member(VERSION_MAJ2, 1))
    #message(Week: $$NUMWEEK)

    VERSION_MEN5=$$system("echo  %time%")
    VERSION_MEN6 =$$split(VERSION_MEN5, ":")
    VERSION_MEN7 =$$member(VERSION_MEN6, 0)
    VERSION_MEN8 =$$member(VERSION_MEN6, 1)
    VERSION_MEN9=$$system("set /a  $$MDIA4 + $$MMES4 + $$VERSION_MEN7 + $$VERSION_MEN8")
    greaterThan(VERSION_MEN9, 99){
        VERSION_MEN10=$$VERSION_MEN9
    }else{
        VERSION_MEN10=0$$VERSION_MEN9
    }
    APPVERSION=$$VERSION_MAJ7"."$$NUMWEEK$$VERSION_MEN10
    message(Windows App Version $$APPVERSION)
} else:unix {
    VERSION_MAJ1=$$system(date +%Y)
    VERSION_MAJ= $$system("echo $(($$VERSION_MAJ1 - $$VERSION_YEAR))")
    VERSION_MEN1= $$system("echo $((($$system(date +%-m) * $$system(date +%-d)) + $$system(date +%-H) + $$system(date +%-M)))")

    greaterThan(VERSION_MEN1, 99){
        VERSION_MEN2=$$VERSION_MEN1
    }else{
        VERSION_MEN2=0$$VERSION_MEN1
    }
    APPVERSION=$$VERSION_MAJ"."$$system(date +%W)$$VERSION_MEN2
    message(App Version $$APPVERSION)
}


Comentarios

Entradas populares