x64 x32 visual sp1 microsoft descargar c++ visual-c++ execution compile-time

x32 - Sello de tiempo de compilación de salida en ejecutable de Visual C++?



microsoft visual c++ 2012 redistributable(x86) (6)

Aunque no es su formato exacto, DATE tendrá el formato Mmm dd aaaa, mientras que TIME tendrá el formato hh: mm: ss. Puede crear una cadena como esta y usarla en cualquier rutina de impresión que tenga sentido para usted:

const char *buildString = "This build XXXX was compiled at " __DATE__ ", " __TIME__ ".";

(Nota sobre otra respuesta: TIMESTAMP solo escupe la fecha / hora de modificación del archivo fuente, no la fecha / hora de compilación).

¿Cómo puedo insertar información de compilación de marca de tiempo en un archivo ejecutable que compilo con Visual C ++ 2005? Quiero poder mostrar algo como esto cuando ejecuto el programa:

Esta compilación XXXX se compiló en dd-mm-aa, hh: mm.

donde la fecha y la hora reflejan la hora en que se construyó el proyecto. No deberían cambiar con cada llamada sucesiva del programa, a menos que se vuelva a compilar.


Bueno ... para Visual C ++, hay un símbolo __ImageBase llamado __ImageBase . Específicamente:

EXTERN_C IMAGE_DOS_HEADER __ImageBase;

Puede inspeccionar eso en tiempo de ejecución para determinar la marca de tiempo en el encabezado PE:

const IMAGE_NT_HEADERS *nt_header= (const IMAGE_NT_HEADERS *)((char *)&__ImageBase + __ImageBase.e_lfanew);

Y use nt_header->FileHeader.TimeDateStamp para obtener la marca de tiempo, que es segundos a partir del 1/1/1970.


Creo que las soluciones sugeridas para usar DATE , TIME o TIMESTAMP serían lo suficientemente buenas. Recomiendo obtener un control de un programa táctil para incluir en un paso previo a la construcción para tocar el archivo que contiene el uso de la variable de preprocesador. Al tocar un archivo, se asegura de que su marca de tiempo sea más reciente que en el momento de la última compilación. De esta manera, la fecha / hora en el archivo compilado también se cambia con cada reconstrucción.


Visual C ++ también es compatible con __TIMESTAMP__ que es casi exactamente lo que necesita. Dicho esto, la parte más difícil de las marcas de tiempo de compilación es mantenerlas actualizadas, eso significa compilar el archivo en el que __TIMESTAMP__ se utiliza en cada reconstrucción. Sin embargo, no estoy seguro de si hay una manera de configurar esto en Visual C ++.


__TIME__ y __DATE__ pueden funcionar, sin embargo, hay algunas complicaciones.

Si coloca estas definiciones en un archivo .h e incluye las definiciones de múltiples archivos .c / .cpp, cada archivo tendrá una versión diferente de la fecha / hora en función de cuándo se compila. Entonces, si estás buscando usar la fecha / hora en dos lugares diferentes y siempre deben coincidir, estás en problemas. Si está haciendo una compilación incremental, uno de los archivos puede reconstruirse mientras que el otro no, lo que nuevamente da como resultado marcas de tiempo que podrían ser muy diferentes.

Un enfoque un poco mejor es hacer prototipos GetBuildTimeStamp () en un archivo .h, y poner las macros __TIME__ y __DATE__ en el archivo de implementación (.c / .cpp). De esta forma, puede usar las marcas de tiempo en varios lugares de su código y siempre coincidirán. Sin embargo, debe asegurarse de que el archivo .c / .cpp se reconstruye cada vez que se realiza una compilación. Si está haciendo construcciones limpias, esta solución puede funcionar para usted.

Si está realizando compilaciones incrementales, debe asegurarse de que el sello de compilación se actualice en cada compilación. En Visual C ++ puede hacer esto con los pasos de PreBuild; sin embargo, en este caso recomendaría que en lugar de usar __DATE__ y __TIME__ en un archivo compilado .c / .cpp, use un archivo de texto que se lea en tiempo de ejecución durante la ejecución de tu programa Esto hace que sea más rápido para su script de compilación actualizar la marca de tiempo (no se requiere compilación o enlace) y no requiere su paso PreBuild para comprender las opciones u opciones del compilador.


__DATE__ __TIME__

están predefinidos como parte de los estándares para C99, por lo que deberían estar disponibles para usted. Se ejecutan una vez con el preprocesador.