Forum: Compiler & IDEs Kompiler-Schalter per Makefile?


von Kay I. (imperator)


Lesenswert?

Moin zusammen!

Ich suche nach einer Möglichkeit, mehrere binaries zu erzeugen, indem 
ich das Makefile mit verschiedenen Parametern aufrufe.
Ich würde gern mehrere Firmware-Variationen aus dem selben Source-Code 
erzeugen und dabei die Varianten durch ein Script erzeugen.

Ich stell mir das so vor, dass man im Makefile auf Parameter A oder B 
oder C prüft. Anschließen wird ( je nach A, B, C) der gcc mit einem 
Parameter aufgerufen (z.B. PARA_A=1).

Im Make-File steht dann vielleicht sowas:
1
CFLAGS = -mmcu=atmega32
2
CFLAGS += -PARA_A=1
3
4
## Compile
5
Bi_Main.o: ../src/Bi_Main.c
6
  $(CC) $(INCLUDES) $(CFLAGS) -c  $<


Im Source-Code hat man dann soche Konstrukte:
1
#if( PARA_A )
2
  dann übersetze Code-Abschnitt A
3
#endif

Dann ruft man das z.B. auf durch: make A
Und es wird dann ein Binary mit Code-Abschnitt A übersetzt

Noch besser wäre natürlich ein automatisch generiertes Makefile durch 
passende Optionen im AVRStudio...


Habt Ihr da eine Idee?

von Patrick (Gast)


Lesenswert?

Beim GCC gibts den Kommandozeilenparameter -D zur Übergabe von defines 
(vgl. -DF_CPU). Im Sourcecode dann einfach mit #ifdef arbeiten, und im 
Makefile verschiedene Targets mit jeweils entsprechenden -D's anlegen.

MfG

von Patrick (Gast)


Lesenswert?

Nachtrag: Wenn's darum geht, die Firmware für verschiedene AVRs zu 
compilieren, kannst Du auch die vom GCC gesetzten Defines (#if defined 
(_AVR_ATmega1281_)), die den eingestellten Prozessor (-mmcu) angeben, 
verwenden. Siehe avr/io.h.

von Kay I. (imperator)


Lesenswert?

Genau sowas!

hast noch einen Tip, wie ich das am besten ins Makefile einbaue?

Aus AVRStudio kommen ja immer diese fertigen raus - so eins würd ich 
dann editieren. Wie kann man da jetzt am besten die verschiedenen 
Targets "verwalten" bzw. deren Generierung?


... überigens hätte ich Compiler wohl lieber mit C schreiben sollen ;)

von Patrick (Gast)


Lesenswert?

Wenn ich das richtig in Erinnerung habe, sind die AVR-Studio-Makefiles 
etwas doof; dort gibt es die Targets "all" usw. und zusätzlich für jedes 
Object-File ein separates Target. Daher denke ich, wäre es wohl das 
Beste, mit einer Variablen zu arbeiten.

Irgendwo müßte es das Target "all" geben; entweder dieses (oder das 
erste Target im Makefile, falls das ein anderes ist), entsprechend oft 
kopieren.

Variablen lassen sich Target-abhängig z. B. so setzen:
1
mynewtarget: CFLAGS += -DMYDEFINE=27
2
mynewtarget: (alte Abhängigkeiten hier)
3
  (alte Befehle hier)

Damit kannst Du dann die das Define Target-abhängig setzen.


MfG

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.