Sobre el tema de construir automáticamente el código y el número de versión

Si usa la compilación automática, la información de la versión es un dolor de cabeza.
La información de la versión debe incluir los siguientes tres aspectos:

模块名称:foo
版本号:v1.1.1
构建信息: 132

La información de compilación suele ser el número de registros en git / svn, lo que puede garantizar la versión correcta al buscar el error;
escribir la información de la versión en el código puede causar los siguientes problemas:

  1. El número de versión en el programa y el número de versión empaquetado no son correctos por un momento de error;
  2. No siempre que necesite modificar el número de versión, es fácil de olvidar por control humano;
  3. La información de compilación proviene de la herramienta de administración de versiones, cambia tan pronto como envía el código y la escritura no es rigurosa;

Por lo tanto, la mejor solución es escribir la información de la versión en el script de compilación y modificar el archivo de número de versión durante la compilación. Luego compila.
En este momento, necesita una herramienta para obtener información sobre la versión.

Uso mi lenguaje C favorito para lograr lo siguiente:

#include <stdio.h>
#include <string.h>
 
int getBuildInfo(const char* cmd)
{
    FILE *fstream = NULL;
    char buffer[1024];
    int res = 0;
    memset(buffer,0,sizeof(buffer));
    if (NULL == (fstream = popen(cmd,"r")))      
    {     
        return -1;      
    }   
 
    fgets(buffer, sizeof(buffer), fstream); 
    pclose(fstream);    
    sscanf(buffer,"%d",&res);
    return res;     
}


int main(int argc, char *argv[])
{
   FILE *fp = NULL;
   char* gitcmd="git rev-list --all|wc -l";
   char* svncmd="svn info|grep \"Last Changed Rev:\"|awk -F : '{print $2}'|sed 's/ //g'";
   int res = 0;
   char buffer[2048];
   memset(buffer,0,sizeof(buffer));
   if (argc < 4) {
      printf("Usage:./getversion [NAME] [VERSION] [git/svn/other]\n");
      return 1;
   }
   if (strcmp(argv[3],"git") == 0){
       res = getBuildInfo(gitcmd);
   }else if (strcmp(argv[3],"svn") == 0){
       res = getBuildInfo(svncmd);
   }else{
       res = 58;
   }
   char* arr="#ifndef __VER_H_FILE__\
\r\n#define __VER_H_FILE__\
\r\n\
\r\n#define ___MODULE___	\"%s\"\
\r\n#define ___VERSION___	\"%s\"\
\r\n#define ___BUILD___	\"%d\"\
\r\n\
#endif";
   sprintf(buffer,arr,argv[1],argv[2],res);
 
   fp = fopen("verion.h", "w+");
   fprintf(fp, "%s",buffer);
   fclose(fp);
   return 0;
}

Implementación

./getVersionInfo foo v1.1.1 git

Luego compile version.h como un archivo de encabezado en su propio código, de modo que la información de compilación sea coherente con la información del código.

Supongo que te gusta

Origin www.cnblogs.com/bugutian/p/12701092.html
Recomendado
Clasificación