2017-01-17 1 views
1

Ich möchte den Namen einer C-Include-Datei zur Kompilierzeit als C-Flag angeben.Verwenden Sie den GCC-Präprozessor, um den Dateinamen für #include zu definieren

z.B.

#include MY_INCLUDE_FILE 
int main(int argc, const char * argv[]) {...} 

Würde durch den Pre-Prozessor

#include "some_incfile.h" 
int main(int argc, const char * argv[]) {...} 

tun so etwas wie dies die # Zeichenfolgenoperator

gcc -DMY_INCLUDE_FILE="some_incfile.h" main.c 

Ich habe versucht, expaned werden nur Fehler zu erweitern, aber haben solche bekommen wie error: expected "FILENAME" or <FILENAME>

Ist das überhaupt möglich? -D definieren, ist nicht unbedingt erforderlich, der wichtige Teil ist, dass die Include-Dateiname kann von der gcc-Befehlszeile

+1

Die Idee ist gut, das Problem ist Shell-Erweiterung der Anführungszeichen –

Antwort

5

Sie müssen die „Flucht eingestellt werden.

gcc -DMY_INCLUDE_FILE=\"some_incfile.h\" main.c 
+0

So einfach ... sollte natürlich daran erinnern, zu entkommen "". Das funktioniert gut und ist, was ich fragte, so ist es die akzeptierte Antwort. Die Antwort von anonymoose löst auch mein Problem. " – bits

1

Verwenden Sie die Option -include

gcc -include "somefile.h" main.c 
+0

Nicht genau das, wonach ich gefragt habe, aber es genauso gut löst, vielleicht sogar eleganter. – bits

1

Sie können es tun etwas wie das

# if defined AAA 
#define INC "x.h" 
#elif defined BBB 
#define INC "y.h" 
#endif 

#include INC 

und Von der Befehlszeile aus tun Sie gcc -DAAA.

und natürlich können Sie direkt gcc -DINC="\"FILE.h\"" passieren, wenn die Datei wirklich zufällig von außen erzeugt wird, durch Makefiles etc.

Wichtig ist INC auf einen gültigen Dateinamen durch die Makroerweiterung Verfahren ausgewertet werden (siehe der Prosser-Algorithmus).

Verwandte Themen