Forum: Compiler & IDEs Versions Macro


von clonephone82 (Gast)


Lesenswert?

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

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

1
#define VERSION "1.002"

So hast die '1.002' in VERSION :-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rene Schube schrieb:

> So hast die '1.002' in VERSION :-)

Die Frage lautete allerdings auf generieren.

von clonephone82 (Gast)


Lesenswert?

@jörg vielen dank
@rene :-)

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

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.

von greg (Gast)


Lesenswert?

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.

von M, nicht Q (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

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