Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Como Añadir La Feca Y Hora Al Compilar

Iniciado por Haddd, 31 de Enero de 2004, 11:10:09 PM

« anterior - próximo »

Haddd

 Vereis, yo tengo esto:

CXString CHaddd::VersionDelMotor()
{
   return CXString(_T("Haddd 1.0 (31 Enero 2004 23:05)"));
}


Y cada vez que hago una nueva versión, debo cambiar la fecha y la hora.

¿Existe algún opción en VStudio.Net para que me ponga el solito la fecha de compilación?

Algo así:

CXString CHaddd::VersionDelMotor()
{
   return CXString(_T("Haddd 1.0 ()")+DATE_TIME_STRING);
}

Zaelsius

 Efectivamente existen tales macros. He mirado en la ayuda de VS.NET para pegar la sección, pero no sé que coj##@~ le pasa que no lo encuentra. Así que te pongo un enlace que he encontrado en google:

http://h30097.www3.hp.com/docs/base_doc/DO...TE/DOCU_084.HTM

Pongo aquí lo más interesante:
Citar
8.8.1 The __DATE__ Macro

The __DATE__ macro evaluates to a string literal specifying the date on which the compilation started. The date has the following format:

"Mmm dd yyyy"

The names of the months are the same as those generated by the asctime library function. The first d is a space if dd is less than 10. For example:

printf("%s",__DATE__);

The value of this macro remains constant throughout the translation unit.
8.8.2 The __FILE__ Macro

The __FILE__ macro evaluates to a string literal specifying the file specification of the current source file. For example:

printf("file %s", __FILE__);

8.8.3 The __LINE__ Macro

The __LINE__ macro evaluates to a decimal constant specifying the number of the line in the source file containing the macro reference. For example:

printf("At line %d in file %s", __LINE__, __FILE__);

8.8.4 The __TIME__ Macro

The __TIME__ macro evaluates to a string specifying the time that the compilation started. The time has the following format (the same as the asctime function):

hh:mm:ss

For example:

printf("%s", __TIME__);

The value of this macro remains constant throughout the translation unit.

Loover

 No sé si es lo que buscas pero puedes usar la función time:


// Archivo
mCout = new ofstream ("debug.log", ios::out);

// Tiempo
time_t mT;
time (&mT);
struct tm *mPetm = localtime (&mT);

// Fecha
char *mDs [7] = {"Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado"};
char *mMs [12] = {"Enero","Febreo","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
 
*mCout << "[Debug.log]:" << " (";

// Fecha
*mCout << mDs [mPetm->tm_wday] << ", " << mPetm->tm_mday << " de " << mMs [mPetm->tm_mon] << " del " << mPetm->tm_year+1900 << ")" << endl << endl;


Da como resultado algo del estilo de:
Citar[Debug.log]: (Sabado, 31 de Enero del 2004)
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Haddd

 Genial Zaelsius, es así!!  (ole)


s.Formato(_T("Haddd 1.0 (%s %s)"),__DATE__,__TIME__);

BeRSeRKeR

Cita de: "Loover"No sé si es lo que buscas pero puedes usar la función time
Loover, creo que lo que quería Haddd era la fecha de compilación, no la de creación del log...

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Loover

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

tamat

 Pero esto me plantea una duda:

Si pones  string fecha = __DATE__; al compilar eso se expande y queda como string fecha = "1-2-04"; pero dado que por lo general muchos archivos solo se compilan cuando se produce un cambio entonces probablemente la fecha que aparecerá será la de la ultima vez que ESE archivo se compilo, y si dicho archivo está en una librería entonces aparecerá una fecha erronea ya que por lo general al compilar solo se compilan unos pocos archivos (a no ser que hagas rebuild all).

¿Controla eso el compilador? O es necesario poner esa macro solo en el archivo más bajo de la jerarquía para asegurarse que siempre se recompila y se procesa la macro?
Por un stratos menos tenso

BeRSeRKeR

 En la documentación dice que __DATE__ y __TIME__ especifican la fecha y la hora de la última compilación del archivo al que hace referencia. De forma que habrán casos en los que ocurra lo que dice tamat. Si el archivo de código del log no se recompila en cada compilación de proyecto, el resultado no será el esperado.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

tamat

 Y ya que hablamos de macros una duda más, existe alguna macro que retorne un valor unico? algo semejante a una hash de la hora del sistema, es para el tema de los RTTIs, para que cada clase tenga un metodo que retorne un valor unico que sirva para identificar clases, gracias.
Por un stratos menos tenso

jpastor

 Lo más normal es que una combinacion de __FILE__ y __LINE__ sea única, lo que no sabria decirte es como luego identificarlas.

fiero

 Y ya puestos en el tema, ¿hay alguna forma de hacer que la versión del exe se incremente en cada compilación? Me refiero a que muchos programas tienen una versión tipo: 2.0.4.2456 o del tipo 2.0.4 build 2456  El último número imagino que hace referencia al número de compilación, pero no creo que cada vez que el programador compile vaya al editor de recursos a cambiar el numero de versión ¿o si?

saludos
www.videopanoramas.com Videopanoramas 3D player

jpastor

 Si usas dev-cpp tiene una opción para eso, en opciones de proyecto (ALT+P), pestaña de información (la última).

fiero

 Perdón, se me olvidó comentar que uso VC 6

un saludo
www.videopanoramas.com Videopanoramas 3D player

Juan Mellado

Hola a todos,

fiero, mírate esto:
http://www.codeguru.com/devstudio_macros/B...crementer.shtml

Utiliza macros de Visual C++, añadiendo código al evento Application_BeforeBuildStart

Saludos

P.D. Mírate los comentarios de la página, el código original tenía errores que corrigieron luego

fiero

 Gracias Juan, es justo lo que buscaba

un saludo
www.videopanoramas.com Videopanoramas 3D player






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.