Kompiler-Schalter per Makefile?

OP #2206836
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?
Gast #2206851
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
Gast #2206859
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.
OP #2206868
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 ;)
Gast #2206885
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren