Projektname als String

Gast #6141113
Lesenswert?

Hallo Leute,

ich habe in System Workbench ein Projekt. Den Projektnamen würde ich 
gern im LCD anzeigen lassen. Natürlich könnte man das händisch 
erledigen, aber ich hätte das gern automatisiert. Wie komme ich in C 
dahin, dass der Projektname in einem String landet?
Gast #6141300
Lesenswert?

ja ja, steht alles im C-Buch...
Da muss man schon mit Macros tricksen und der gcc ist da etwas zickig.
1
#define STRINGIFY(x) #x
2
#define TOSTRING(x) STRINGIFY(x)
3

4

5
printf("Hello from "  TOSTRING(PROJECT_NAME) "\n");

damit bekommt man ein define in einen String. Jetzt muss noch 
PROJECT_NAME (habe ich hier nur als Beispiel genommen) von der Workbench 
in den Compiler setttings für die übergebenen defines vorhanden sein. 
Eventuell gibt es sowas, oder man muss gucken ob es eine 
Envrionmentvariable gibt die man in ein entsprechendes define packen 
kann. Und da es hier wohl um Cortex-M geht gibt es auch kein PROGMEM.
Also nicht unbeding das erste Kapitel im C-Buch.
#6141366
Lesenswert?

Zum Beispiel: im Makefile
1
HOST := $(shell hostname)
2
USER := $(shell whoami)
3
TOP  := $(shell dirname `pwd`)
4

5
CFLAGS += -DHOSTNAME="\"$(HOST)\""
6
CFLAGS += -DUSERNAME="\"$(USER)\""
7
CFLAGS += -DBUILD_PATH="\"$(TOP)\""
und dann
1
   printf ("  GCC %d.%d.%d (%s)\n  %s@%s:%s",
2
           __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__, __VERSION__,
3
           USERNAME, HOSTNAME, BUILD_PATH);
Gast #6141992
Lesenswert?

Der C Compiler weiß nicht was ein "Projekt" ist und auch nicht was der 
Name des Projekts ist. Du kannst in Eclipse (=System Workbench) in den 
Projekteinstellungen Makros (dort fälschlich "Symbol" genannt) 
definieren und als Wert "${project_name}" setzen, das wird dann von 
Eclipse mit dem Projektnamen ersetzt. Das Makro kannst du dann im Code 
nutzen.
Gast #6142079
Lesenswert?

Ich habe nun in Settings -> Tools -> Global compiler settins -> #defines 
_SW_VERSION_  "${TARGET_OUTPUT_BASENAME}" erzeugt.

Ich bekomme als Fehlermeldung:

1V9 No such file or directory
1V9, so heisst das Projekt
Gast #6143227
Lesenswert?

Ingo Less schrieb:
> Ich habe nun in Settings -> Tools -> Global compiler settins -> #defines
> SW_VERSION  "${TARGET_OUTPUT_BASENAME}" erzeugt.

Das sind die globalen Settings, also völlig falsch. Hab Grad kein 
Eclipse zu Hand und kanns nicht nachgucken. Rechte Maustaste auf das 
Projekt, Properties, C/C++ General -> Paths and Symbols -> Symbols, oder 
so ähnlich.

https://armstrap-documentation.readthedocs.io/en/latest/_images/Eclipse-Project-Properties.png

https://help.eclipse.org/2019-12/topic/org.eclipse.cdt.doc.user/images/prop_symb.png
Gast #6143257
Lesenswert?

Danke für die Hilfe, aber ich glaube man hat hier das EmBitz zu weit von 
Eclipse verfremdet. Die Menüeinträge gibts garnicht. Habe es aber 
woanders gefunden:

Unter den BuildOptions kann ich dieses #define erzeugen:
SW_VERSION="${TARGET_OUTPUT_BASENAME}"

Im Programm mache ich dann folgendes:
1
const char TimeStampBuildTime[] = SW_VERSION;

Das wirft aber die Fehlermeldung "invalid suffix "V9" on integer 
constant".

Das heisst, er erzeugt ein #define, welches einen String statt einer 
Zahl erhält. Damit kommt er nicht klar. Irgendwo habe ich noch n Fehler 
in der Syntax offensichtlich. Aber einen String als #define is sowieso 
schwierig oder? Kannst du mir da noch n Tip geben wo der Hase begraben 
liegt?
Gast #6143267
Lesenswert?

Ingo Less schrieb:
> Danke für die Hilfe, aber ich glaube man hat hier das EmBitz zu weit von
> Eclipse verfremdet.

EmBitz? Ich dachte es geht um System Workbench?

Ingo Less schrieb:
> Das heisst, er erzeugt ein #define, welches einen String statt einer
> Zahl erhält

Genau umgekehrt.

Ingo Less schrieb:
> Aber einen String als #define is sowieso schwierig oder?

Nö, da müssen nur Anführungsstriche drum, wie von Bauform B. gezeigt.
Gast #6143272
Lesenswert?

Ingo Less schrieb:
> Unter den BuildOptions kann ich dieses #define erzeugen:
> SW_VERSION="${TARGET_OUTPUT_BASENAME}

Das klingt stark nach Code::Blocks, also doch EmBitz. Da helfen die 
Hinweise zu Eclipse natürlich überhaupt nicht. Aber warum war dann zu 
Anfang die Rede von System Workbench?
Gast #6143281
Lesenswert?

Programmierer schrieb:
> Das klingt stark nach Code::Blocks, also doch EmBitz
Verdammte Axt, du hast natürlich völlig Recht, es ging hier um EmBitz! 
Normalerweise arbeite ich mit System Workbench, habe aber noch ein altes 
Projekt aus EmBitz wieder beleben müssen, da habe ich mich anfangs 
gleich vertan -.-

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren