Präprozessordefines aus externer Datei

OP #5889992
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.