Hallo,
probier mal folgendes im Makefile:
- TARGET_PLATFORM = plat1
und weiter unten dann beim Compileraufruf:
- GCC -D $(TARGET_PLATFORM) ...
Das sollte funktionieren.
Werbung
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
Hallo,
probier mal folgendes im Makefile:
- TARGET_PLATFORM = plat1
und weiter unten dann beim Compileraufruf:
- GCC -D $(TARGET_PLATFORM) ...
Das sollte funktionieren.
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
Das weiß er durch "gcc -D $(TARGET_PLATFORM) ...".
Mit -D übergibt man auf der Kommandozeile Präprozessordefinitionen.
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
habs kapiert. nochmals vielen Dank...sehr gute erklärung.
Gruß
Stefan
Nein, eher wie eine Konstante. Genaugenommen ist es ein Präprozessorsymbol, das halt entweder definiert ist oder nicht (genau das testet #ifdef).ist das zu verstehen wie eine variable?
Lesezeichen