mikrocontroller.net

Forum: Compiler & IDEs Projektname als String


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht 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?

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Ingo Less schrieb:
> Wie komme ich in C
> dahin, dass der Projektname in einem String landet?

in dem du dem File den Projektnamen gibst?

Dort steckt er ja in argv[0] oder _NAME

von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> in dem du dem File den Projektnamen gibst?
Kannst du das etwas näher ausführen? Ich steh aufm Schlauch.

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Ingo Less schrieb:
> in C

steht in jedem C-Buch
http://www.c-howto.de/tutorial/funktionen-teil-2/hauptfunktion/

oder bei gcc
const char main_name[] PROGMEM = {__FILE__};

von Nick M. (muellernick)


Bewertung
-1 lesenswert
nicht lesenswert
Joachim B. schrieb:
> const char main_name[] PROGMEM = {__FILE__};

Voller Pfad mit extension?

von Johannes S. (jojos)


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


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.

von Nick M. (muellernick)


Bewertung
0 lesenswert
nicht lesenswert
Mach ein #define in den ProjectSettings.

von Bernd K. (prof7bit)


Bewertung
1 lesenswert
nicht lesenswert
Lass einfach vom Makefile einen Header erzeugen der all diese Sachen als 
Define enthält (Name, Version, Branch, Commit-ID, Compiledatum, was auch 
immer...)

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Johannes S. schrieb:
> Und da es hier wohl um Cortex-M geht gibt es auch kein PROGMEM

Hellseher?
vom TO liesst man das nicht ;)

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> Hellseher?

Es ist Google, der hellsieht, wenn man "System Workbench" eingibt :)

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Es ist Google, der hellsieht, wenn man "System Workbench" eingibt

ach so, ja dann google hat sich ja noch nieeeee geirrt :)

dachte ich bei workbench immer an Amiga.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Bewertung
1 lesenswert
nicht lesenswert
Joachim B. schrieb:
> dachte ich bei workbench immer an Amiga.

Gib mal "Workbench" in die Bildersuche ein.

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert

von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Zum Beispiel: im Makefile
HOST := $(shell hostname)
USER := $(shell whoami)
TOP  := $(shell dirname `pwd`)

CFLAGS += -DHOSTNAME="\"$(HOST)\""
CFLAGS += -DUSERNAME="\"$(USER)\""
CFLAGS += -DBUILD_PATH="\"$(TOP)\""
und dann
   printf ("  GCC %d.%d.%d (%s)\n  %s@%s:%s",
           __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__, __VERSION__,
           USERNAME, HOSTNAME, BUILD_PATH);

von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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...

von Programmierer (Gast)


Bewertung
0 lesenswert
nicht 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.

von Nick M. (muellernick)


Bewertung
-1 lesenswert
nicht lesenswert
Ingo Less schrieb:
> FILE hilft nicht weiter,

Genau das hab ich doch geschrieben!?

von Ingo Less (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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?

von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht 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

von Nick M. (muellernick)


Bewertung
0 lesenswert
nicht lesenswert
Ingo Less schrieb:
>> Genau das hab ich doch geschrieben!?
> Nö, du hast ne Frage dazu gestellt.

https://de.wikipedia.org/wiki/Rhetorische_Frage

von Ingo Less (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
*Push

von Programmierer (Gast)


Bewertung
0 lesenswert
nicht 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

von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht 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:
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?

von Bauform B. (bauformb)


Bewertung
0 lesenswert
nicht lesenswert
Ingo Less schrieb:
> SW_VERSION="${TARGET_OUTPUT_BASENAME}"

SW_VERSION="\"${TARGET_OUTPUT_BASENAME}\""

von Programmierer (Gast)


Bewertung
2 lesenswert
nicht 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.

von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bauform B. schrieb:
> SW_VERSION="\"${TARGET_OUTPUT_BASENAME}\""
Astrein! Das war die Lösung! Vielen Dank euch beiden!

von Programmierer (Gast)


Bewertung
0 lesenswert
nicht 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?

von Ingo Less (Gast)


Bewertung
0 lesenswert
nicht 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

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.

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