PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Im Makefile variablen definieren?



Whassup
25.05.2005, 10:09
Hallo,

ich habe 2 verschiedene hardwareplattformen auf dem die software (demo) laufen soll (pinbelegungen des controllers unterscheiden sich). im makefile gibt es deshalb die option: TARGET_PLATFORM = -plat1.
im headerfile der software gibt es die anweisung:
#ifdef plat1
#include "hal/atmega128/plat1.h"
#endif
#ifdef plat2
#include "hal/atmega128/plat2.h"
#endif

wie ist jetzt der zusammenhang zwischen der variablen TARGET_PLATFORM und dem header file?

Vielen Dank schon mal.

gruß
stefan

M@nni
01.06.2005, 12:09
Hallo,

probier mal folgendes im Makefile:
TARGET_PLATFORM = plat1
und weiter unten dann beim Compileraufruf:
gcc -D $(TARGET_PLATFORM) ...

Das sollte funktionieren.

Whassup
01.06.2005, 13:45
Hi,

also funktionieren tut das schon, so wie ich es aufgeschrieben habe. ich verstehe es halt nur nicht, weil es wird im makefile definiert: target_plattform=-plat1 und dann im source-code steht #ifdef plat1. also woher weiß der compiler nun, dass sich target_plattform auf ifdef=plat1 bezieht?
vielen dank
gruß
stefan

lekro
01.06.2005, 15:22
Das weiß er durch "gcc -D $(TARGET_PLATFORM) ...".

Mit -D übergibt man auf der Kommandozeile Präprozessordefinitionen.

M@nni
01.06.2005, 15:24
Hallo Stefan,

TARGET_PLATFORM ist eine Variable im Makefile und nur das make-Tool verwendet sie. Der Compiler bekommt davon garnichts mit.

Das Ganze funktioniert so: mit "TARGET_PLATFORM=plat1" wird im Makefile die Variable TARGET_PLATFORM definiert und ihr der Wert "plat1" zugewiesen. Wird jetzt später an einer anderen Stelle im Makefile $(TARGET_PLATFORM) benutzt, ersetzt das make-Tool diese Variable durch ihren aktuellen Wert und führt dann die entsprechenden Kommandos aus. Make macht also im Prinzip eine Textersetzung. So wird z.B. aus "avr-gcc -D $(TARGET_PLATFORM) ..." das Kommando "avr-gcc -D plat1 ...".

Make ruft den Compiler also über die Kommandozeile "avr-gcc -D plat1 ..." auf. Mit der Option "-D" wird das Symbol "plat1" definiert und in Deinem C-Programm wird daraufhin der Zweig mit "#ifdef plat1" compiliert.

Ich hoffe, meine Erklärung war einigermaßen verständlich. Falls nicht, einfach weiter fragen.

Gruß,
M@nni

Whassup
02.06.2005, 06:23
habs kapiert. nochmals vielen Dank...sehr gute erklärung.

Gruß
Stefan

Whassup
02.06.2005, 15:59
doch noch eine frage..:-)
wenn du schreibst es wird das Symbol plat1 definiert, was meinst du dann genau mit "Symbol". ist das zu verstehen wie eine variable?
danke
gruß
stefan

lekro
02.06.2005, 16:28
ist das zu verstehen wie eine variable?Nein, eher wie eine Konstante. Genaugenommen ist es ein Präprozessorsymbol, das halt entweder definiert ist oder nicht (genau das testet #ifdef).