Projektname als String

Gast #6141113
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
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.
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
Nick M. schrieb:
>> const char main_name[] PROGMEM = {__FILE__};
_FILE_ hilft nicht weiter, es gibt den Dateinamen der Sourcdatei 
zurück (z.B. main.c). So wie es scheint, kommt man an die Info nicht 
ohne Krücken über Makefile dran. Sehr schade...
Gast
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
Nick M. schrieb:
> Genau das hab ich doch geschrieben!?
Nö, du hast ne Frage dazu gestellt.

Programmierer schrieb:
> Du kannst in Eclipse (=System Workbench) in den
> Projekteinstellungen Makros (dort fälschlich "Symbol" genannt)
> definieren und als Wert "${project_name}" setzen,
Ich habs an verschiedenen Stellen versucht. Wo genau soll ich das Symbol 
erstellen?
Gast
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.