Hallo,
ich will gern den Zeitpunkt, wann mein Programm kompiliert wurde in
meinem Code haben. Dafür gibt es die Funktion _DATE_, welche folgendes
Format verwendet:
Feb 12 1996 - siehe auch
http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
Gibt es ein Makro, welches das Datum im reinen Dezimalwert ausgibt, z.B.
das heutige Datum 21.11.2013 als 20131121 oder am Besten 131121.
Vielen Dank
David
Da du ja schon auf der passenden Handbuchseite warst, siehst du, dass
es sowas nicht gibt.
Muss man sich halt im Buildsystem zusammenbauen, bspw. im Makefile
mit:
Blöd nur, dass das nicht unter Windows geht. Ich suche auch schon länger
nach einer Lösung für das Problem. Es würde reichen, wenn man einfach
einen Timestamp einfügen konnte. Kann man aber nicht, zumindest habe
ich in der Anleitung dazu nichts gefunden. Nur das für Mikrocontroller
unnötig aufgeblähte _DATE_. Ein echtes Manko in avr-gcc, finde ich.
Wenn deine IDE es erlaubt ein Kommando auszuführen, bevor ein File
compiliert wird (meist nennt sich das ein Prebuild Step), dann ist das
ja dann auch wieder kein Problem.
Dann schreibt man sich eben ein Programm für den PC, welches die
gewünschte Formatierung in ein File schreibt und includet das in den
Source an den bewussten Stellen.
David B. schrieb:> Vielen Dank für den Hinweis.>> Kannst du das mit dem Makefile etwas mehr erläutern oder mir paar Links> für gute Erklärungen geben.
Benutzt du überhaupt ein Makefile?
An und für sich ist die Sache einfach.
Das von Jörg angesprochene 'make' stellt offenbar das Datum zur
Verfügung.
Die Compilerflags werden daher so erweitert, dass dem Compiler beim
Aufruf ein Makro untergejubelt wird, DATESTAMP, welches dann das
gewünschte enthält.
Du kannst dann im Programm dieses Makro ganz normal benutzen
1
....
2
3
charDate[]=DATESTAMP;
Das ist also wie ein
1
#define DATESTAMP "abc...xyz"
nur dass nicht du dieses Makro definierst, sondern dass dem Compiler das
Makro von aussen
1
....-DDATESTAMP="abc...xyz"
beim Compileraufruf mitgegeben wird. Und trickreicherweise wird der
Ersatztext des Makros durch die in 'make' vorhandenen Datumsfunktionen
zusammengesetzt.
Peter II schrieb:> Peter schrieb:>> Blöd nur, dass das nicht unter Windows geht>> date gibt es auch für Windows.
Eben.
Das ganze ist also mehr eine Frage dessen, waas die jeweilige IDE kann
oder nicht kann und nicht so sehr eine Frage dessen, was der gcc kann.
Peter schrieb:> Blöd nur, dass das nicht unter Windows geht.
Dann installiere eine Scriptsprache deiner Wahl. Hier der Ersatz
für obiges "date +%Y%m%d":
1
$ python -c 'from time import *; print strftime("%Y%m%d", localtime(time()))'
Hallo,
vielen vielen Dank für die vielen hilfreichen Antworten.
Ich habe es jetzt mit einem Script (Batch-Datei) und date gelöst
(Vorschlag von Peter II).
Ich habe mich dazu entschlossen, weil ich auch noch die SVN-Version
haben möchte.
Für Date habe ich folgendes Script angepasst:
http://www.pcwelt.de/forum/showthread.php?478432-Batch-file-um-Text-A-durch-Text-B-zu-ersetzen
und für SVN habe ich folgendes genutzt:
1
for /f "tokens=5" %%i in ('SubWCRev WorkingCopyPath^|find "Last committed at revision"') do set version=%%i