
Ich versuche, das Kompilierungsdatum aus einem Linux-Befehl zu extrahieren (oder CPP wäre auch in Ordnung). Ich verwende:
stat -c %z ./myProgram.bin
Wenn ich jedoch beispielsweise per SSH an einen anderen Ort kopiere myProgram.bin
, gibt mir der Stat-Befehl im Grunde das Datum der Kopie an.
Wie kann ich das tatsächliche Kompilierungsdatum erhalten? Danke.
Antwort1
Thomas Dickeys Antwortbehandelt das Problem im Allgemeinen für alle (ELF-)Binärdateien. Angesichts der Formulierung Ihrer Frage finden Sie möglicherweise die__DATE__
und __TIME__
vordefinierte Makrosnützlich; sie ermöglichen die Bezugnahme auf Datum und Uhrzeit der Kompilierung innerhalb eines Programms (so dass ein Programm sein eigenes Datum und seine eigene Uhrzeit der Kompilierung kennt).
Hier ist ein kurzes Beispiel:
#include <stdio.h>
int main(int argc, char **argv) {
printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
return 0;
}
Antwort2
stat -c %z
zeigt die letzte Erstellungs-/Aktualisierungszeit der Datei an und kann nicht geändert oder beibehalten werden. Wenn Sie die Datei also an einen anderen Ort kopieren, wird sie immer eine neue Erstellungszeit erhalten. Sie suchen nach einer stat -c %y
Anzeige der letzten Änderungszeit, die normalerweise von den meisten Tools, die mit Dateien und Verzeichnissen arbeiten, beibehalten wird.
Antwort3
Sie können unter Beibehaltung des Änderungszeitpunkts kopieren, z. B.
cp --preserve=timestamps source destination
oder (allgemeiner:Modus,EigentumUndZeitstempel)
cp -p source destination
obwohl in einigen Fällen die ErhaltungEigentumist nicht erwünscht.
Auf ähnliche Weise können Sie mit -p
der Option von scp auf Remote-Systeme kopieren:
scp -p source remote:destination
aber scp
keine separaten Optionen für den Modus usw. Da es mit dem angegebenen läuftFernbedienungBerechtigungen, es gibt jedoch keine Funktion zum gleichzeitigen Festlegen des Remote-Eigentums. Aufgrund dieser Einschränkungen möchten Sie möglicherweise tar
ein Archiv erstellen, das Sie auf dem Remote-System extrahieren und dabei so viele Informationen wie möglich erhalten.
Das für Binärdateien verwendete ELF-Format enthält kein Datum, daher können Sie nur den Änderungszeitstempel der Datei beibehalten.
Weiterführende Literatur: