Forum: Mikrocontroller und Digitale Elektronik Datum & Uhrzeit im makefile für Dateinamen (Windows!)


von Make my date... (Gast)


Lesenswert?

Hallo Forum,

ich habe schon viel gesucht und finde nichts funktionierendes für 
Windows.
Im makefile möchte ich das zum Aufrufzeitpunkt aktuelle Datum und die 
Uhrzeit in einer Variable haben und dann an den Dateinamen anhängen.
Wie bekomme ich Datum und Uhrzeit in eine Variable?

Für Linux gibt es viele Beispiele, die ich aber nicht übertragen kann.

von Gerry L. (Gast)


Lesenswert?

"__DATE__" und "__TIME__" sind die Variablen
$target der filename

Setze es zusammen und du hast was du möchtest.

Gerry

von Make my date... (Gast)


Lesenswert?

Das klappt bei mir nicht.
Wenn ich folgendes mache:

DATE = _DATE_
OUTPUTNAME  = test_$(DATE)

Kommt test___DATE__ heraus...

von Jasch (Gast)


Lesenswert?

Make my date... schrieb:
> Das klappt bei mir nicht.
> Wenn ich folgendes mache:
>
> DATE = __DATE__
> OUTPUTNAME  = test_$(DATE)
>
> Kommt test___DATE__ heraus...

Um mal die ganz offensichtlichen Fragen zu stellen:

- was für ein Windows und deutsch oder englisch oder was?
- welches Make?

Sprache könnte wichtig sein weil sich die Formate von Datum/Zeit da 
unterscheiden.

von Make my date... (Gast)


Lesenswert?

Ok, das war mir nicht klar.

Also es handelt sich um ein Makefile für den avr-gcc (winavr-20100110) 
unter Windows 7 (64bit) Deutsch.

Wäre natürlich gut, wenn es unter XP und Win7 (32bit) und Englisch auch 
funktioniert. Wie man es für eine andere Sprache formatiert ist dann ja 
eigentlich ein weiterer Schritt. Wenn es anders aussieht ist ja nicht 
schlimm.
Zumindest scheint es aber grundsätzlich anders als unter Linux zu gehen, 
denn dazu finde ich viel, was aber unter Win nicht klappt.

make ist Version 3.81 built for i386-pc-mingw32

Danke!

von A. W. (uracolix)


Lesenswert?

WinAvr bringt eine ganze Menge Linux Tools (mingw) mit, schau mal ob 
"date" dabei ist und dann erweitere %PATH% um den Pfad zu date

Im Makefile steht dann:
1
OUTPUTNAME=test_$(shell date +"%Y%M%d_%H%m")
2
3
foo:
4
    echo $(OUTPUTNAME)


__DATE__ und __TIME__ sind Preprozessor Macros, das Format eignet 
sich aber weniger zur Filenamensbildung:
1
echo __DATE__ __TIME__ | avr-gcc -E -
2
# 1 "<stdin>"
3
# 1 "<built-in>"
4
# 1 "<command-line>"
5
# 1 "<stdin>"
6
"Jul  4 2013" "09:00:46"

von Make my date... (Gast)


Lesenswert?

A. W. schrieb:
> OUTPUTNAME=test_$(shell date +"%Y%M%d_%H%m")

Wow, das funktionierte auf Anhieb. Komisch, mit date habe ich es schon 
probiert gehabt, aber ich glaube ohne das "shell".

Komisch ist nur, dass die Reihenfolge beim Datum nicht passt (Monat und 
Tag vertauscht) und die Zeit 2 Std und 20 Minuten daneben liegt.

Um 9:27 Uhr habe ich folgenden Output erhalten:
test_20132704_0707.hex

Hast du dazu noch eine Idee?

von Make my date... (Gast)


Lesenswert?

Hm, ne irgendwas stimmt da nicht. Die Zeit ist immer gleich und das 
Datum irgendwie falsch.

Um 9:36 Uhr am 4.07.2013 mit $(shell date +"%Y%M%d_%H%m")
test_20133604_0707.hex

von Make my date... (Gast)


Lesenswert?

Übrigens "C:\WinAVR\utils\bin" stand schon in der PATH Variablen...

von A. W. (uracolix)


Lesenswert?

Hm, probier mal das Alphabet durch, ich glaub ich hab da die 
Gross/Kleinschreibung der Wechselstaben verbuchselt. "date --help" is 
your friend.

von Make my date... (Gast)


Lesenswert?

"date --help" funktioniert leider nicht, das hatte ich auch schon 
versucht...
Aber weder ein Monat noch ein Tag 36 ergibt Sinn?!
Irgendwas ist da faul...

von auch Hans (Gast)


Lesenswert?

Hallo,

tausche mal %m und %M. Großes M steht für Minute, kleines m steht für 
Monat.

von Make my date... (Gast)


Lesenswert?

Komisch, dass die Hilfe nicht geht.
Nur am Rande: Googlen nach "Hilfe zu Date" ist nicht zielführend ;-)

Das Vertauchen von %m und %M sieht gut aus.
DATETIME = $(shell date +"%Y%m%d_%H%M")

Jetzt bin ich noch 2 Stunden daneben, vermutlich eine 
Zeitzonengeschichte.

von Stefan E. (sternst)


Lesenswert?

Make my date... schrieb:
> Nur am Rande: Googlen nach "Hilfe zu Date" ist nicht zielführend ;-)

Wenn du nach Hilfe für Kommandos suchst, die aus der Unix-Welt kommen, 
dann suche nicht nach "Hilfe zu", sondern nach "manpage", oder "man 
page", oder "manual", oder ...

von Make my date... (Gast)


Lesenswert?

Also angezeigt wird die Zeit als GMT Zeit.
Wir sind aber GMT +2 bei Sommerzeit und GMT +1 bei Winterzeit.
Kann man nicht die Zeit, die Windows darstellt herausbekommen?

von Make my date... (Gast)


Lesenswert?

#Sommerzeit +2, Winterzeit +1
DATETIME = $(shell date --date='GMT +2 hours' +"%Y%m%d_%H%M")

Das soll mir jetzt reichen.
Vielen Dank für die Hilfe!

von Peter II (Gast)


Lesenswert?

Make my date... schrieb:
> Kann man nicht die Zeit, die Windows darstellt herausbekommen?

hat aber den nachteil das dann die Zeit nicht mehr eindeutig ist. Wenn 
du in der Nacht der umschaltung etwas erzeugst woher willst du wissen 
wann du es gemachst hast? Jeder Zeitpunkt gibt es dann immer 2mal.

von Make my date... (Gast)


Lesenswert?

Aber ich arbeite nachts nicht und mache auch keine nightly builds... ;-)

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
Noch kein Account? Hier anmelden.