Codegenerierung aus XML-Files



  • Gestern habe ich bemerkt, dass ein Autobuild-Projekt eine XML-Datei enthielt, aus der ein Header und eine Implementation erzeugt worden.
    Nun frage ich mich wie das Programm hieß, dass die Konvertierung vorgenommen hat und wie ich soetwas in cmake integrieren könnte.

    Mfg



  • Auf die Gefahr hin, dich komplett falsch zu verstehen:

    Soweit ich dich verstehe, hast Du irgendein XML-File im Verzeichnis rumliegen. Daraus generiert dir irgendein Programm dann ein paar Header, die dann zusammen mit dem "selbstgeschriebenen" Teil compiliert und gelinkt werden.

    Ok. Sowas ist ziemliches Standardvorgehen, zB. immer dann, wenn man Schnittstellen für Interprozesskommunikationen definiert. Die Schnittstellenbeschreibung liegt als XML in irgendeinem Format rum (in einer IDL). Es gibt dann entsprechende Codegeneratoren, die dir dann aus der IDL Quelltext produzieren. Gegen diesen Quellcode wird dann normalerweise entwickelt.

    Der Sinn ist, das irgendjemand anderes nur die gleiche Schnittstellenbeschreibung braucht und dann Anwendungen für die gleiche Schnittstelle entwickeln kann und sich die Programme direkt verstehen, ohne dass man sich lange Gedanken über ein eigenes Protokoll machen muß.

    Welches Programm könnte das gewesen sein? Schwer zu sagen, gibt es wie Sand am Meer, für jedes Kommunikationsmedium und Schnittstellenbeschreibung gibt es da was eigenes. Unter Linux ist zB. der D-Bus verbreitet und da gibt es für jedes Sprachbinding (qdbusxml2cpp, dbus-binding-tool, usw.) einen eigenen XML-Compiler um aus dem Introspection-Format Code zu erzeugen. Gibt es aber für alles mögliche, nicht nur D-Bus.

    Ins Cmake wird man das bekommen, indem man den Compiler und die Ausgangsdateien unter add_custom_command in CMakeLists einträgt ...



  • Danke dir.
    Für mich war es bisher neu, dass man XML für sowas benutzen konnte.
    Scheint allerdings äußerst praktisch zu sein.



  • Google mal nach XSLT - benutzen wir auf der Arbeit häufig um z.B. aus einem Datenmodell einerseits die Erzeugung der Datenbanktabellen für verschiedene Datenbanksysteme und andererseits die entsprechende Zugriffsschicht zu generieren. Gibt noch zig andere Anwendungen...



  • Ich habe mal in dem Projekt "Wayland", dass mit den Autotools gebaut wird geschaut, wie der Autor seine xml-file einbindet.
    es existiert eine scanner.mk datei mit:

    %-protocol.c : $(protocoldir)/%.xml
    	$(AM_V_GEN)$(wayland_scanner) code < $< > $@
    
    %-server-protocol.h : $(protocoldir)/%.xml
    	$(AM_V_GEN)$(wayland_scanner) server-header < $< > $@
    
    %-client-protocol.h : $(protocoldir)/%.xml
    	$(AM_V_GEN)$(wayland_scanner) client-header < $< > $@
    

    diese datei wird in einer makefile.am eingebunden wird:

    include $(top_srcdir)/src/scanner.mk
    

    Allerding ist mir immernoch rätselhaft wo die Autotools an dem Punkt ansetzen, bzw. welches Programm dafür aufgerufen wird. Ich weis nur, dass eine abh. zu expat besteht.


Anmelden zum Antworten