Ich habe eine lange Liste von Konstanten, auf die ich in mehreren Projekten in verschiedenen Sprachen (Verilog, C, C ++ und C #) zugreifen muss. Anstatt sie in jeder Sprache zu wiederholen, gibt es eine gute Möglichkeit, diese zu teilen?
Das Einzige, woran ich denken könnte, wäre eine Textdatei und ein Vorverarbeitungsskript? Ist das die beste Lösung oder gibt es etwas einfacheres / eleganteres?
Sie können sie in einem XML-Dokument speichern und XSLT-Skripts für jede Sprache schreiben, um die entsprechenden Quelldateien in jedem Build zu generieren.
Können Sie Ihr Makefile (oder Äquivalent) verwenden, um diese Konstanten zu definieren? Für C und C ++. Sie können die CLI-Optionen des Compilers verwenden, um Vorprozessorwerte für die Konstanten zu definieren. Ich habe nicht viel Build-Anpassung für Verilog gemacht, aber ich vermute, dass etwas Ähnliches dort auch existieren könnte.
Sie können eine einfache Datei in Form von
schreiben %Vor%und dann etwas wie, für c:
anwenden s/\([a-zA-Z][a-zA-Z1-9_]*\)[ \t]*=[ \t]*\(.*\)/#define /
Beachten Sie, dass Sie möglicherweise Typen angeben müssen, da nicht alle Sprachen die Verwendung eines präprozessorspezifischen Makros ermöglichen, das den Typ nicht interessiert.
Alternativ können Sie in Flex / Bison einen Lexer / Parser erstellen, um die Konfigurationsdatei zu analysieren. Dies wird klarer und einfacher zu erweitern.
Für Verilog (zumindest für System Verilog) und C ++ können Sie alle Konstanten als eine Liste (vorausgesetzt, sie sind alle vom selben Typ) wie folgt schreiben:
%Vor%in C ++ würden Sie
verwenden %Vor%in Verilog (zumindest im System Verilog) können Sie dies verwenden
%Vor%Ich denke, c # enthält keine Includes. Also würden Sie dort zumindest ein Pre-Processing-Skript benötigen, um Ihre Konstanten in eine Klasse aufzunehmen. Sie können möglicherweise 'cpp' dafür verwenden. Sorry, weiß nicht viel über c #.
Um alles ähnlich zu machen, würde ich wahrscheinlich cpp benutzen, um die Datei zu erzeugen, die ich brauche:
%Vor%