Forum: Compiler & IDEs Variable Header Datei


von Eddy C. (chrisi)


Lesenswert?

Hallo C -Profis,

Es würde mir meine Situation in einem Projekt erleichtern, wenn folgende 
oder sinngemäß ähnliche Möglichkeit existieren würde:
1
#ifdef CONFIGFILE
2
  #include CONFIGFILE
3
#else
4
  // Define standard config
5
#endif

Das Ziel soll sein, einen Quelltext mit unterschiedlichen 
Konfigurationen zu übersetzen, welche heute noch nicht bekannt sind. 
Zukünftig sollen neue projektbezogene Konfigurationen entstehen, welche 
aber keine Modifikation der C-Datei erfordern.

Ist so etwas möglich?

Danke für die Rechenzeit :-)

von Mark (Gast)


Lesenswert?

Eddy Current schrieb:
> Ist so etwas möglich?

Nimm einen Texteditor und schreib's hin. Warum soll das nicht gehen. 
Ansonsten wird dir dein Compiler schon sagen, wenn ihm etwas nicht 
passt.

von Sam P. (Gast)


Lesenswert?

Nein, so ist das nicht möglich. Was aber einen vergleichbaren Effekt 
hätte:

#include "config.h"

Verschiedene Varianten von config.h liegen in verschiedenen 
Unterverzeichnissen, und man wählt die gewünschte Datei per 
compiler-option "-I" (großes ieh, Beispiel gcc) aus.

von Ralf G. (ralg)


Lesenswert?

Eddy Current schrieb:
> Ist so etwas möglich?

So ähnlich:
1
#ifdef CONFIG1_ID
2
#include "config1.h"
3
#endif
4
#ifdef CONFIG2_ID
5
#include "config2.h"
6
#endif

Die ID in den Compiler-Optionen eintragen.

von Klaus W. (mfgkw)


Lesenswert?

Ich hatte mal einen Fall, wo die Headerdateien an Kunden gingen, und ich 
nicht wollte, daß jeder etwas von den anderen zu sehen bekommt.
Dafür hatte ich mir eine Quelldatei gebaut mit m4-Makros, aus denen der 
Präprozessor m4 die eigentlichen Headerdateien generiert hat.

von Stefan E. (sternst)


Lesenswert?

Eddy Current schrieb:
> Ist so etwas möglich?

Ja, genau so wie du es oben geschrieben hast, kann man es machen.

Wenn du das Define für CONFIGFILE in der IDE (oder im Makefile) 
festlegen willst, musst du nur darauf achten, dass du die 
Anführungszeichen entsprechend kapselst, damit sie dir auf dem Weg über 
die Kommandozeile nicht verloren gehen.

von Rolf Magnus (Gast)


Lesenswert?

Sam P. schrieb:
> Nein, so ist das nicht möglich.

Dann sag das mal den Entwicklern von freetype, denn die machen das seit 
vielen Jahren.
Ich frage mich nur, wozu das #ifdef da sein soll. Ohne erscheint mir das 
sinnvoller.

von Malte S. (maltest)


Lesenswert?

Rolf Magnus schrieb:
> Ich frage mich nur, wozu das #ifdef da sein soll. Ohne erscheint mir das
> sinnvoller.

Sieht so aus, dass das Einbinden eines spezifischen Headers optional 
sein soll.

von Eddy C. (chrisi)


Lesenswert?

Malte S. schrieb:
> Sieht so aus, dass das Einbinden eines spezifischen Headers optional
> sein soll.

Genau!

Ich habe jetzt folgendes ausprobiert:
1
#define CONFIGFILE "config.h"
2
#include CONFIGFILE

Der Fehler lautet:
test.c:5:20: fatal error: config.h: No such file or Directory

Also geht's genau so, wie es gewünscht ist. Der erste Post hat's bereits 
"angedeutet"...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Mit GCC gibt's auch die Möglichkeit, das #include wegzulassen und beim 
Compile-Aufruf ein -include config.h anzugeben. Damit wird config.h 
includet auch wenn es kein #include "config.h" in der Quelle steht.

Im vorliegenden Fall würde z.B. des Makefile den Dateiname beim -include 
bestimmen.

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
Noch kein Account? Hier anmelden.