Forum: Compiler & IDEs Präprozessor und Projektvariable


von Norbert S. (norton)


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 ...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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).

von Norbert S. (norton)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

-DPROJ=$(PROJECT)

von Norbert S. (norton)


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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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:
1
#define PROJ_A  42
2
#define PROJ_B  4711

main.c:
1
#include "project.h"
2
3
#if PROJECT == PROJ_A
4
// do this
5
#elif PROJECT == PROJ_B
6
// do that
7
#else
8
#  error "Unknown project."
9
#endif
10
...

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

von Norbert S. (norton)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.