www.mikrocontroller.net

Forum: GCC Projectabhängige includes #defines zusammenfügen?


Important 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.
Autor: prinzenrolle (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

ich habe folgendes vor:
--------------------
File: Project.h
#define PROJECT "Test"
#include "Lib.h"

-------------------
File: Lib.h

#include PROJECT "_Tasten.h" //"Test_Tasten."

-------------------

->
Ziel ist es das je nach definition von PROJECT andere Dateien 
eingebunden werden leider bekomme ich die defines nicht zusmmangefügt.

Jemand eine Idee?

Danke

Autor: Michael Rathmair (dj_motionx)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo sofern ich das jetzt verstanden habe suchst du nach der ifdef 
Anweisung

Also in lib.h

#ifdef PROJECT
#include "_Tasten.h"
#endif

Also sofern du PROJECT irgendwo definiert hast (#define PROJECT) ist die 
"If defined" Präprozessoranweisung erfüllt und _Tasten.h wird 
inkludiert.

Hast du das so gemeint?

L.g. Michael

Autor: prinzenrolle (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Michael Rathmair schrieb:
> Hallo sofern ich das jetzt verstanden habe suchst du nach der ifdef
> Anweisung
>
> Also in lib.h
>
> #ifdef PROJECT
> #include "_Tasten.h"
> #endif
>
> Also sofern du PROJECT irgendwo definiert hast (#define PROJECT) ist die
> "If defined" Präprozessoranweisung erfüllt und _Tasten.h wird
> inkludiert.
>
> Hast du das so gemeint?
>
> L.g. Michael

Hallo,
nein das habe ich nicht gemeint.

Es soll includiert werden
test_tasten.h

im project ist
#define PROJECT "test" definiert.


Danke

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
#define CATx(a,b) a##b
#define CAT(a,b) CATx(a,b)

#define STRx(a) #a
#define STR(a) STRx(a)


#define PROJECT Test


#include STR(CAT(PROJECT,_Tasten.h))

Autor: Rene H. (promeus)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich vermute mal das geht nicht weil include ebenfalls eine Präprozessor 
Anweisung ist. Ich hab es aber nicht überprüft was der der Präprozessor 
macht.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Rene H. schrieb:
> Ich hab es aber nicht überprüft was der der Präprozessor
> macht.

Du hättest du nur einfach Stefans Code durch den Präprozessor jagen
müssen:
$ echo "hi" > Test_Tasten.h
$ cc -E -
#define CATx(a,b) a##b
#define CAT(a,b) CATx(a,b)

#define STRx(a) #a
#define STR(a) STRx(a)


#define PROJECT Test


#include STR(CAT(PROJECT,_Tasten.h))
^D
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "<stdin>"
# 11 "<stdin>"
# 1 "Test_Tasten.h" 1
hi
# 11 "<stdin>" 2

Autor: Rene H. (promeus)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Jo, habe ich eben schnell gemacht, Du warst schneller :-).

Funzt fabelhaft.

Autor: Micha (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Stefan Ernst schrieb:
> #define CATx(a,b) a##b
> #define CAT(a,b) CATx(a,b)
>
> #define STRx(a) #a
> #define STR(a) STRx(a)
Dass man mit CAT() Symbole zusammenfügen kann weiß ich, aber wozu dient 
das STR()?

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Micha schrieb:
> Stefan Ernst schrieb:
>> #define CATx(a,b) a##b
>> #define CAT(a,b) CATx(a,b)
>>
>> #define STRx(a) #a
>> #define STR(a) STRx(a)
> Dass man mit CAT() Symbole zusammenfügen kann weiß ich, aber wozu dient
> das STR()?

Es macht aus dem Argument ein String-Literal.
STR(hallo) -> "hallo"

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




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net