www.mikrocontroller.net

Forum: Compiler & IDEs Präprozessor und Projektvariable


Autor: Norbert S. (norton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes problem, ich möchte Projektabhängig verschiedene 
Files includieren und weiß aber leider nicht ob es eine "Projekt 
Variable" dafür gibt.
Das AVR Studio speichert ja den Namen in das Makefile. Kann ich den 
wieder auslesen und abfragen?

im Prinzip sollte es so aussehen:

#if (_PROJECT_ == Projekt1)
  #define SCHALTUNG  Print1
#elif (_project_ == Projekt2)
  #define SCHALTUNG  Print2
#endif

#if SCHALTUNG ...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst dir mit -D auf der Kommandozeile beliebig was zusammenbauen.
Auf Make-Variablen greifst du im Makefile mit einem $ zu, wobei der
Name dann zu klammern ist, falls er mehr als einen Buchstaben hat
(entweder in runden oder gescheiften Klammern).

Autor: Norbert S. (norton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nun -DPROJ $(PROJECT) hinzugefügt. Wird beim Build erstellen 
auch angezeigt. Nur die Abfrage im Headerfile funktioniert leider nicht.

Kann ich dann nicht einfach folgendermasse abfragen:

#if (PROJ == MeinProjekt)
  #warning Mein Projekt
#elif (PROJ == SeinProjekt)
  #warning Sein Prijekt
#endif

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-DPROJ=$(PROJECT)

Autor: Norbert S. (norton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das "=" eh dabei gehabt also so: -DPROJ=$(PROJECT)

Kann es sein, dass da nur Zahlen übergeben werden können und keine 
Zeichen?

Oder funktionieren im Präprozessorteil nur Zahlen?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Norbert S. wrote:

> Kann es sein, dass da nur Zahlen übergeben werden können und keine
> Zeichen?

Der Präprozessor macht eine reine Textersetzung.  Da kann beliebiger
Kram drin stehen.

> Oder funktionieren im Präprozessorteil nur Zahlen?

Da nähern wir uns der Sache schon eher...  Der Steuerausdruck eines
#if ist ein arithmetischer Ausdruck vom Typ `int'.

Was aber geht ist sowas:

project.h:
#define PROJ_A  42
#define PROJ_B  4711

main.c:
#include "project.h"

#if PROJECT == PROJ_A
// do this
#elif PROJECT == PROJ_B
// do that
#else
#  error "Unknown project."
#endif
...

Im Makefile dann -DPROJECT=$(PROJECT), wobei PROJECT die Werte PROJ_A
oder PROJ_B haben darf.

Autor: Norbert S. (norton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe!

Weiss jetzt wenigstens aus welchem Grund das nicht funktioniert.
Muss mir allerdings etwas neues einfallen lassen um mein Problem zu 
lösen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.