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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.