Hallo Zusammen, #define VERSION_MAJOR 1 #define VERSION_MINOR 2 #define STRINGIZE2(s) #s #define STRINGIZE(s) STRINGIZE2(s) #define VERSION_STRING STRINGIZE(VERSION_MAJOR) "." STRINGIZE(VERSION_MINOR) in VERSION_STRING habe ich jetzt "1.2" kennt jemand eine Möglichkeit auch "1.002" daraus zu generieren nur mit einem macro? danke
Mir fiele dazu nur die #if-Anweisung ein:
1 | #define VERSION_MAJOR 1
|
2 | #define VERSION_MINOR 2
|
3 | #define STRINGIZE2(s) #s
|
4 | #define STRINGIZE(s) STRINGIZE2(s)
|
5 | #if VERSION_MINOR < 10
|
6 | # define VERSION_STRING STRINGIZE(VERSION_MAJOR) ".00" STRINGIZE(VERSION_MINOR)
|
7 | #elif VERSION_MINOR < 100
|
8 | # define VERSION_STRING STRINGIZE(VERSION_MAJOR) ".0" STRINGIZE(VERSION_MINOR)
|
9 | #else
|
10 | # define VERSION_STRING STRINGIZE(VERSION_MAJOR) "." STRINGIZE(VERSION_MINOR)
|
11 | #endif
|
Rene Schube schrieb: > So hast die '1.002' in VERSION :-) Die Frage lautete allerdings auf generieren.
Das hab ich mir schon gedacht. ABER wenn ich MAJOR un MINOR per Hand eingeben muss, ist es doch doof. Da würde ich meine Variante doch bevorzugen.
Der C-Präprozessor ist nicht für sowas gedacht. Du brauchst hier Schleifen. Das geht zwar, ist aber ein Krampf. Setze einfach VERSION_MINOR auf "002" oder generiere die Versionsnummer anders. Wenn du C++ verwendest, guck dir mal constexpr an.
greg schrieb: > Setze einfach VERSION_MINOR auf "002" oder generiere die Versionsnummer > anders. Wenn du C++ verwendest, guck dir mal constexpr an. 002 ist eine Oktalkonstante. Das kann zu einem Griff ins Klo werden.
Ich mache das mit ner Batch, die dann auch gleich das Hex entsprechend nennt.
1 | @echo off |
2 | set vers_h=01 |
3 | set vers_l=05 |
4 | set name=UVLS600FP |
5 | |
6 | set fcpu=8e6 |
7 | set mcu=mega328p |
8 | set main=%name%_V%vers_h%.%vers_l% |
9 | |
10 | echo --std=gnu99 >opt.z |
11 | echo -DPROJECT_STRING=\"%name%\" >>opt.z |
12 | echo -DREVISION_STRING=\"%vers_h%.%vers_l%\" >>opt.z |
13 | echo -DREV_HI=0x%vers_h% >>opt.z |
14 | echo -DREV_LO=0x%vers_l% >>opt.z |
15 | echo -DF_CPU=%fcpu% >>opt.z |
16 | |
17 | avr-gcc.exe *.c @opt.z -Os -mmcu=at%mcu% -gdwarf-2 -o main.out |
18 | avr-objcopy.exe -O ihex main.out "%main%.hex" |
19 | del main.out |
20 | del opt.z |
Ich kenne das so, dass man Versionsnummern aus einer Datei ausliest. In einer solchen "Versionsnummerndatei" kann man vor, während oder nach dem Build-Prozess beliebig mit einer Skriptsprache drin rumnudeln. ;)
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.