-
        

Ergebnis 1 bis 8 von 8

Thema: Im Makefile variablen definieren?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30

    Im Makefile variablen definieren?

    Anzeige

    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2005
    Beiträge
    13
    Hallo,

    probier mal folgendes im Makefile:
    • TARGET_PLATFORM = plat1

    und weiter unten dann beim Compileraufruf:
    • GCC -D $(TARGET_PLATFORM) ...


    Das sollte funktionieren.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30
    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

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.04.2005
    Beiträge
    66
    Das weiß er durch "gcc -D $(TARGET_PLATFORM) ...".

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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2005
    Beiträge
    13
    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

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30
    habs kapiert. nochmals vielen Dank...sehr gute erklärung.

    Gruß
    Stefan

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30
    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

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    05.04.2005
    Beiträge
    66
    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).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •