Präprozessordefines aus externer Datei

OP #5889992
Lesenswert?

Hallo miteinander,

ich suche jetzt schon eine Weile und finde aber nichts passendes.
Gibt es eine Möglichkeit (in Visual Studio) in C/C++ Präprozessor 
Definitionen aus einer externen Datei zu importieren?
Und zwar habe ich ein Simulinkmodell aus welchem Code generiert wird, 
der gewrapped und in eine DLL eingebunden wird. Dabei erzeugt Simulink 
eine defines.txt Datei, deren Inhalt wie folgt aussehen kann:
1
MODEL=Test
2
NUMST=4
3
NCSTATES=0
4
HAVESTDIO
5
RT
6
USE_RTMODEL
7
CLASSIC_INTERFACE=0
8
ALLOCATIONFCN=0
9
TID01EQ=0
10
MAT_FILE=0
11
ONESTEPFCN=1
12
TERMFCN=1
13
MULTI_INSTANCE_CODE=0
14
INTEGER_CODE=0
15
MT=1

Aktuell werden diese Definitionen von Hand in die Projekt Eigenschaften 
in Visual Studio kopiert. Das würde ich gerne automatisieren, da sich 
diese Definitionen auch gerne mal ändern, wenn das Simulink Modell 
angefasst wird. Am allerliebsten würde ich einfach irgendwo den Pfad zu 
der Datei angeben.
Wie würdet ihr das lösen?
Persönliche Seite #5890006
Lesenswert?

A. Z. schrieb:
> Gibt es eine Möglichkeit (in Visual Studio) in C/C++ Präprozessor
> Definitionen aus einer externen Datei zu importieren?

Ja, natürlich, das ist das Grundprinzip jedes C-Compilers.

Nur muss diese "externe Datei" den üblichen Gepflogenheiten entsprechen, 
d.h. normale C-Syntax verwenden.

Aus Deinem
1
MODEL=Test
2
NUMST=4
3
NCSTATES=0
4
HAVESTDIO
5
RT
6
USE_RTMODEL
7
(etc.)

wird dann
1
#define MODEL Test
2
#define NUMST 4
3
#define NCSTATES 0
4
#define HAVESTDIO
5
#define RT
6
#define USE_RTMODEL
7
(etc.)

Also jedes "=" durch ein Leerzeichen ersetzen und an den Anfang jeder 
Zeile ein "#define " einfügen.

Diese Transformation aus dem einen ins andere Format müsstest Du mit 
einem simplen Skript basteln, und das Ergebnis in Deinem Projekt via 
#include einbinden.

VisualStudio kennt auch das Konzept der "forced includes", die ohne eine 
eigene #include-Anweisung in jede zum Projekt gehörende 
Übersetzungseinheit eingebunden werden.

(Configuration Properties -> C/C++ -> Advanced -> Forced Include File)
Gast #5955790
Lesenswert?

Onkel Sam schrieb:
> A. Z. schrieb:
>> Habe dann doch ein kleines Skript geschrieben um den Inhalt von
>> Defines.txt anzupassen.
>
> Magst Du Dein Script mal hier posten?

Sowas ist doch  ein Einzeiler...
1
sed -n 's/^\([a-Z0-9_]\+\)\(=\(.*\)\)\?\s*$/#define \1 \3/p' <inputfile >outputfile.h
Persönliche Seite #5957442
Lesenswert?

A. Z. schrieb:
> Wie würdet ihr das lösen?

Beim GCC gibt's auch die Möglichkeit von Option-Files:

Eine Textdatei mit gewünschtem Namen anlegen, z.B. opt.txt, und beim 
Compilieren @opt.txt als Option mit angeben.  In der Option-Datei können 
beliebige Optionen stehen (und auch Dateinamen etc.), eine pro Zeile. 
Also würde opt.ttx in deinem Fall so aussehen:
1
-D MODEL=Test
2
-D NUMST=4
3
-D NCSTATES=0
4
-D HAVESTDIO
5
-D RT
6
...

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