Forum: Compiler & IDEs makefile - Variable für Name ausm Code


von Markus C. (ljmarkus)


Lesenswert?

Hallo..

ist es möglich im makefile beim Namen des .hex Files eine Varaible 
einzusetzen die im Code hinterlegt ist ?

zb. in der config.h habe ich stehen:

#define snummer1 0x00
#define snummer2 0x20
#define snummer3 0x30
#define snummer4 0x40
#define snummer5 0x50
#define snummer6 0x60

im makefile:

FORMAT = ihex
TARGET = programm.hex

das soll jetzt aber so lauten:

00-20-30-40-50-60.hex

Danke, Markus

von Εrnst B. (ernst)


Lesenswert?

in der Theorie geht das, aber nur mit hohem Aufwand (mit perl/sed/awk 
das .h-File durchstöbern, im Makefile dann danach das File umbenennen). 
Das Dependency-Tracking des make geht dabei vermutlich flöten.

Einfacher: definier deine snummer-teile NUR im Makefile, gib sie dem gcc 
über -Dsnummer=xx weiter, und schon sind die variablen auch im  Makefile 
verfügbar.
Weiterer Vorteil: du kannst deine Seriennummer dann auch gleich 
automatisch beim kompilieren generieren lassen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Markus C. wrote:
> Hallo..
>
> ist es möglich im makefile beim Namen des .hex Files eine Varaible
> einzusetzen die im Code hinterlegt ist ?
>
> zb. in der config.h habe ich stehen:
>
> #define snummer1 0x00
> #define snummer2 0x20
> #define snummer3 0x30
> #define snummer4 0x40
> #define snummer5 0x50
> #define snummer6 0x60
>
> im makefile:
>
> FORMAT = ihex
> TARGET = programm.hex
>
> das soll jetzt aber so lauten:
>
> 00-20-30-40-50-60.hex
>
> Danke, Markus

Du kannst es umgekehrt machen, also Variablen im Makefile definieren:
1
#define snummer1 SUMMER1

Makefile
1
SUMMER1 =0x00
2
SUMMER2 =0x02
3
4
TARGET= $(SUMMER1)-$(SUMMER2)-...
5
6
DEFS = -DSUMMER1=$(SUMMER1) ...
7
8
%.o: %.c
9
  $(CC) $(DEFS) ... $< -o $@

Oder du kannst die Werte aus der C-Datei rauslesen. Dazu die Datei 
scannen mit sed, awk et al. oder nem selbstgeklöppelten Tool.

von Markus C. (ljmarkus)


Angehängte Dateien:

Lesenswert?

@ Johann L.

Danke schön..

nur leider funktioniert es nicht.

ich habe mal das geänderte Makefile angehängt.

Danke, Markus

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das -D muss direkt vor jedes define.
1
DEFS = -DMAKRO1=DEFINE1 -DMAKRO2=DEFINE2 ...

Und verwenden musst du DEFS schon irgendwo. Falls nicht, hat das Setzen 
auch kein Effekt ;-)

von Markus C. (ljmarkus)


Lesenswert?

habe ich jetzt gemacht.

bekomme aber folgende meldungen:

MMAC1 undeclared
....
MMAC6 undeclared


Danke, Markus

von Hermann-Josef (Gast)


Lesenswert?

Hallo,

meiner Meinung nach fehlen die '-D', also so:
1
TARGET = Hexfiles/$(MMAC1)-$(MMAC2)-$(MMAC3)-$(MMAC4)-$(MMAC5)-$(MMAC6)
2
3
DEFS = -DMMAC1=$(MMAC1) -DMMAC2=$(MMAC2) -DMMAC3=$(MMAC3) -DMMAC4=$(MMAC4) -DMMAC5=$(MMAC5) -DMMAC6=$(MMAC6)

So hat es bei mir funktioniert.

Hermann-Josef

von Hermann-Josef (Gast)


Lesenswert?

Sorry,

hatte eben einen Post überlesen und mit dem alten makefile 
experimentiert.

Hermann-Josef

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hermann-Josef wrote:
> Hallo,
>
> meiner Meinung nach fehlen die '-D', also so:
>
>
1
> TARGET = Hexfiles/$(MMAC1)-$(MMAC2)-$(MMAC3)-$(MMAC4)-$(MMAC5)-$(MMAC6)
2
> 
3
> DEFS = -DMMAC1=$(MMAC1) -DMMAC2=$(MMAC2) -DMMAC3=$(MMAC3)
4
> -DMMAC4=$(MMAC4) -DMMAC5=$(MMAC5) -DMMAC6=$(MMAC6)
5
>
>
> So hat es bei mir funktioniert.

Aber nur, weil du DEFS auch verwendest, zB als Teil von CFLAGS (im 
Gegensatz zu Markus)  ;-)

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.