gcc #include mit Macro

Gast #6503527
Lesenswert?

Wenn ich den Dateinamen per per #define CONFIG_H definiere, funktioniert 
der folgende Code:
1
#ifdef CONFIG_H
2
    #include CONFIG_H
3
#endif // CONFIG_H

Wenn ich CONFIG_H per gcc-Kommandozeile mit der -D-Option definiere, 
funktionierts nicht.

Gibt es dafür einen irgendwo dokumentierten Grund?
Moderator Persönliche Seite #6503537
Lesenswert?

Taucher schrieb:
> Gibt es dafür einen irgendwo dokumentierten Grund?

Es funktioniert doch:
1
$ echo hello, world! > foobar.h
2
$ cc -E -DFOO='"foobar.h"' -
3
#include FOO
4
# 1 "<stdin>"
5
# 1 "<built-in>" 1
6
# 1 "<built-in>" 3
7
# 338 "<built-in>" 3
8
# 1 "<command line>" 1
9
# 1 "<built-in>" 2
10
# 1 "<stdin>" 2
11
# 1 "./foobar.h" 1
12
hello, world!
13
# 2 "<stdin>" 2
Gast #6503547
Lesenswert?

Ich habe folgende Varianten ausprobiert:
1
avr-gcc -Wall -mmcu=atmega328p -DF_CPU=16000000UL -g -DCONFIG_H='"config.h"' -I. -I/usr/lib/avr/include -c libraries/scheduler/scheduler.c -o obj/Debug/libraries/scheduler/scheduler.o
2
In file included from libraries/scheduler/scheduler.c:10:0:
3
libraries/scheduler/scheduler.h:6:14: error: #include expects "FILENAME" or <FILENAME>
4
     #include CONFIG_H
5
              ^
1
avr-gcc -Wall -mmcu=atmega328p -DF_CPU=16000000UL -g -DCONFIG_H="config.h" -I. -I/usr/lib/avr/include -c libraries/scheduler/scheduler.c -o obj/Debug/libraries/scheduler/scheduler.o
2
In file included from libraries/scheduler/scheduler.c:10:0:
3
libraries/scheduler/scheduler.h:6:14: error: #include expects "FILENAME" or <FILENAME>
4
     #include CONFIG_H
5
              ^
1
avr-gcc -Wall -mmcu=atmega328p -DF_CPU=16000000UL -g -DCONFIG_H=config.h -I. -I/usr/lib/avr/include -c libraries/scheduler/scheduler.c -o obj/Debug/libraries/scheduler/scheduler.o
2
In file included from libraries/scheduler/scheduler.c:10:0:
3
libraries/scheduler/scheduler.h:6:14: error: #include expects "FILENAME" or <FILENAME>
4
     #include CONFIG_H
5
              ^

Keine tut, was ich will. Der Aufruf erfolgt aus Code:Blocks 16.
#6504215
Lesenswert?

Jörg W. schrieb:
> Wenn es einen Makro CONFIG_H gibt, dann soll die entsprechende Datei
> an der Stelle als include reingezogen werden. Vermutlich, weil sich
> darin irgendwelche konfigurierbaren Parameter befinden …

Schon, nur wie passt das dazu:

> Jetzt muss eben im Projektverzeichnis
> immer eine config.h liegen, egal, was drin steht.

Bei einem nicht definierten Makro CONFIG_H sollte das ja nicht nötig 
sein? 🤔

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren