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 ...
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).
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
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.