Obtener fecha de compilación

Obtener fecha de compilación

Estoy intentando extraer la fecha de compilación de un comando de Linux (o cpp también estaría bien). Estoy usando:

stat -c %z ./myProgram.bin

Sin embargo, si copio myProgram.bina otro lugar a través de ssh, por ejemplo, el comando stat básicamente me da la fecha de la copia.

¿Cómo puedo obtener la fecha de compilación real? Gracias.

Respuesta1

La respuesta de Thomas Dickeyaborda el problema en general, para cualquier binario (ELF). Dada la forma en que está formulada su pregunta, es posible que encuentre la__DATE__y __TIME__macros predefinidasútil; permiten hacer referencia a la fecha y hora de compilación dentro de un programa (de modo que un programa conozca su propia fecha y hora de compilación).

Aquí hay un ejemplo rápido:

#include <stdio.h>

int main(int argc, char **argv) {
    printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
    return 0;
}

Respuesta2

stat -c %zmuestra la hora de la última creación/actualización del archivo y no se puede cambiar ni conservar. Por lo tanto, si copia el archivo a otro lugar, siempre obtendrá un nuevo momento de creación. Lo que está buscando es stat -c %ymostrar la hora de la última modificación, que generalmente se conserva en la mayoría de las herramientas que tratan con archivos y directorios.

Respuesta3

Puede copiar conservando el tiempo de modificación, por ejemplo,

cp --preserve=timestamps source destination

o (más generalmente:modo,propiedadymarcas de tiempo)

cp -p source destination

aunque en algunos casos, preservandopropiedadno es deseado.

De manera similar, puede copiar a sistemas remotos usando -pla opción de scp:

scp -p source remote:destination

pero scpno tiene opciones separadas para el modo, etc. Dado que se ejecuta con el modo dadoremotopermisos, no tiene una función para configurar la propiedad remota al mismo tiempo. Debido a estas limitaciones, es posible que desee utilizarlo tarpara crear un archivo que extraiga en el sistema remoto, conservando la mayor cantidad de información posible.

El formato ELF utilizado para archivos binarios no incluye una fecha, por lo que la marca de tiempo de modificación del archivo es todo lo que puede conservar.

Otras lecturas:

información relacionada