Gibt es eine Möglichkeit, Compilezeit/-datum zur Compilezeit als Konstante zu erhalten? Als String ist das Ganze leider volliger Overkill und verbraucht zu viel Speicher. Ich brauche eigentlich nur einen simplen Timestamp, wie ihn der Compiler ja irgendwo haben muss. Nur, wie komme ich da ran?
In den Übersetzungsprozess ein Include-File einbauen, das jedes Mal neu erzeugt wird und nur ebendies enthält.
Wovon erzeugt? Sowas (Timestamp) müsste eigentlich eine Compiler-Grundfunktion sein. Ich kann den ja nicht jedesmal manuell eintragen.
heiner schrieb: > Wovon erzeugt? Programm/Script deiner Wahl. > Sowas (Timestamp) müsste eigentlich eine > Compiler-Grundfunktion sein. Ein Linker pflegt sowas gern im Binary zu hinterlassen. Aber weshalb der Compiler? In Textform tut er es ja, aber weshalb sollte er es bloss deinetwegen anders machen?
A. K. schrieb: > Ein Linker pflegt sowas gern im Binary zu hinterlassen. COFF hatte mal die Schnapsidee eines Zeitstempels, aber der wurde praktisch nicht benutzt (die Information wird ja bereits im Dateisystem festgehalten), und ELF hat es gar nicht erst übernommen.
Puh, also zu allererst ist ein Timestamp universell, kompatibel, lässt sich ohne Aufwand umrechnen, ...
> Puh, also zu allererst ist ein Timestamp universell, kompatibel, lässt > sich ohne Aufwand umrechnen, ... Dafür wurde die RFC 3339 erfunden.
heiner schrieb: > Puh, also zu allererst ist ein Timestamp universell, kompatibel, lässt > sich ohne Aufwand umrechnen, ... Leider wissen wir nicht so recht, wann unser Universum genau entstanden ist (Urknall), folglich haben wir keinen bekannten Fixpunkt für einen Zeitstempel (anders als bspw. die Temperatur). Alle anderen Bezugssysteme reichen nur eine mehr oder minder endliche Zeit zurück und haben damit zumindest gegenseitige Offsets, die man verwalten muss, egal, ob man das nun an der Geburt eines Propheten, dem Erscheinen eines Betriebssystems oder was auch immer festmacht. Finde dich einfach damit ab, dass du dir einen Zeitstempel in der Skalierung deiner Wahl selbst organisieren musst.
moin, moin, mir reicht ein Timestamp für das komplette Programm, also nicht einer pro Quell-Datei. Den kann (sollte) der Linker einbauen. Dazu gibt's im Makefile zwei Zeilen:
1 | NOW= `date +%s` |
2 | CFLAGS= -Wl,-defsym=BUILD_TIME=$(NOW) |
im Programm gibt's dann diese seltsame Konstruktion, aber im Endeffekt kann ich den Zeitpunkt des make-Aufrufs ganz normal verwenden:
1 | extern int BUILD_TIME; |
2 | time_t build_time = (time_t)&BUILD_TIME; |
Ich würde aber auch eine elegantere Methode verwenden ;)
Ins makefile:
1 | gcc -D_BUILD_TIME=`date +%s` |
In eine zentrale Headerdatei oder jede .c Datei:
1 | extern const time_t BUILD_TIME; |
In eine .c Datei:
1 | const time_t BUILD_TIME = _BUILD_TIME; |
So kann von jeder Stelle im Code "BUILD_TIME" als Programmspeicher-Konstante verwendet werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.