Forum: Compiler & IDEs zeit im makefile


von Philipp Karbach (Gast)


Lesenswert?

bei winavr lassen sich ja mit MFile sehr nette makefiles erstellen. Der
Prozessortakt ist darin mit einem define als F_CPU deklariert, diese
lässt sich dann im code nutzen und wird durch die makefile
vorgeschrieben. Ich hab mir ne kleine Uhr für den AVR geschrieben nur
leider muss ich immer die startzeit von hand eingeben. Kann man das
nicht ins makefile schreiben? So dass ich die stunden,minuten,sekunden
im makefile erst definiere und dann während dem compilieren einstelle?

von Timmo H. (masterfx)


Lesenswert?

Das sollte eigentlich gehen. Dafür musst du in deinem Quellcode halt
sowas wie
1
stunde = STUNDE;
2
minute = MINUTE;
3
sekunde = SEKUNDE;
schreiben, und dann im make-File die CFlags so erweitern:
-DSTUNDE = 15 -DMINUTE = 32 -DSEKUNDE = 00

Allerdings sind das dann feste Werte, kann sein dass gcc für die
Uhrzeit auch Variablen hat. Müsste man mal inna Doku gucken.

von Philipp Karbach (Gast)


Lesenswert?

jup das hab ich mir auch so gedacht aber kann ich mir nicht die
systemzeit im makefile definieren lassen, in linux geht das bestimmt
über ein bisschen bash ;)

von Jan (Gast)


Lesenswert?

Sonst schreib dir doch nen kleines Programm in C was
Stunde/Minute/Sekunde ausgibt und lass das im Makefile verarbeiten.
Oder nimm gleich "date".

von Ssss S. (sssssss)


Lesenswert?

Hi!

Ich mach sowas ähnliches per script:

makebuildis.sh
1
#!/usr/bin/sh
2
id=`cat .buildid`;
3
id=$[$id+1];
4
echo -n $id > .buildid;
5
ts=`date +"%H:%m %d/%m/%Y"`;
6
7
echo -e "#ifndef _BUILD_H_\n#define _BUILD_H_\n#define BUILD_ID
8
\"$id\"\n#define BUILD_TIMESTAMP \"$ts\"\n#endif\n\n" >
9
build.h

.buildid
1
1009

makebuildid.sh liefert ne build.h:
1
#ifndef _BUILD_H_
2
#define _BUILD_H_
3
#define BUILD_ID "1009"
4
#define BUILD_TIMESTAMP "12:05 03/05/2006"
5
#endif

Die include ich einfach in meinem Projekt und kann dann auf BUILDID etc
zugreifen.

Im Makefile dann noch:
1
all: begin gccversion sizebefore buildid build sizeafter finished end
2
...
3
buildid:
4
        @bash makebuildid.sh
5
...

Geht sicher auch einfacher, funktioniert aber ;)
(ein make generiert einen neuen Timestamp und zählt die buildid hoch)

Bye, Simon

von Philipp Karbach (Gast)


Lesenswert?

hmm das ist ne schöne sache :) wenn ich mir jetzt cygwin installiere
sollte das auch mit windows gehen!

von Timmo H. (masterfx)


Lesenswert?

Da Philipp aber WinAVR benutzt würde ich mal sagen, dass er nicht Linux
sondern Windows verwendet. Für ihn kommt daher nur ein kleines
C-Programm in Frage. Am einfachsten bekommst du dir Uhrzeit über cmd
mit dem Befehl "time /T", das könntest du dann über ein kleines
C-Programm in das Makefile eintragen lasssen.

von Philipp Karbach (Gast)


Lesenswert?

da hast du nicht so ganz recht, natürlich kann ich das machen aber
cygwin ist ein paket ähnlich wie winavr. Damit kann man viele
standardpakete von linux auf dem windows shell laufen lassen. Ich hab
das oben genannte skript gerade auf windows ausgeführt und es macht
genau was es soll :).

von Philipp Karbach (Gast)


Lesenswert?

achja Simon, da ist ein fehler in deiner bash script:

ts=`date +"%H:%m %d/%m/%Y"`;

+"%H:%m gibt STUNDE:MONAT aus, es muss %M heißen für die minuten!

von Ssss S. (sssssss)


Lesenswert?

:-X Danke !
Ist bis jetzt noch keinem aufgefallen ggg
(benutze das in meinem avrETH projekt)

Bye, Simon

von Philipp Karbach (Gast)


Lesenswert?

ist mir nur dadurch aufgefallen weil zeit und monat irgendwie immer
gleich waren ;)

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.