Archiv verlassen und diese Seite im Standarddesign anzeigen : Im Makefile variablen definieren?
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
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
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).
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.