Abhängigkeits-Diagramm

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

Hallo an alle,

nach dem ich schon vor einen halben Jahr mein Glück mit Python erfolglos versucht habe, würde ich es nun doch gerne wieder versuchen.

Heute auf der Arbeit bin ich auf die Idee gekommen mit Python ein Abhängigkeits-Diagramm für C++ Header zu schreiben. Gibt es so ein Programm vielleicht schon?

Das Programm sollte vom Solution File aus das ganze Projekt durchforsten nach Abhängigkeiten und anschließend graphisch darstellen - wie bei Doxygen.

Nun, das parsen nach "#include" wird vermutlich noch ganz einfach sein, obwohl ich mich noch nicht mit regulären Ausdrücken auskenne. Was mir aber nun doch etwas Gedanken macht, wie könnte die graphische Ausgabe aussehen? Kann ich sowas nur mit wxWidget erreichen?

Danke und Gruß

Markus
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

lord.hong hat geschrieben:Was mir aber nun doch etwas Gedanken macht, wie könnte die graphische Ausgabe aussehen?
Hallo Markus!

Hier sind ein paar Links für dich.

- http://www.tarind.com/depgraph.html
- http://www.graphviz.org/
- https://networkx.lanl.gov/wiki
- https://networkx.lanl.gov/wiki/pygraphviz
- http://www.langdale.com.au/GraphPath/

mfg
Gerold
:-9
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Wobei ich das herausfinden der Abhängigkeiten nicht mit Python machen würde. Nur nach ``#include`` zu suchen ist ja noch einfach, aber es gibt ja noch so etwas wie bedingte Übersetzung. Also muss man letztendlich einen Preprozessor schreiben und den mit den Symbolen starten, die auch bei einer Übersetzung des Quelltextes definiert wären.

Man könnte den Compiler benutzen um die Abhängigkeiten zu ermitteln. Beim GCC wären das die `-M*`-Optionen.
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

Ich musste nun erstmal den Begriff "bedingte Übersetzung" nachschauen, weil mir seine Bedeutung nicht bekannt war.

Nun muss ich feststellen, dass genau das der Grund ist warum ich gerne einmal ein Abhängigkeitsdiagramm erstellen würde. Mein Kollegen arbeiten gerne mit #if Macro Anweisungen. Außerdem scheint ihnen die Header-Abhängigkeit auch nicht bekannt zu sein.

BlackJack könntest du mir noch etwas helfen, was du genau meinst? Wie schreibe ich einen Preprozessor?

Gruß
Markus
BlackJack

Was ich genau meine ist, dass Du keinen Präprozessor schreiben willst. ;-)

Das ist nicht so trivial wie's auf den ersten Blick aussieht, weil der fast alle gültigen statisch berechenbaren C und C++ Ausdrücke verstehen und auswerten können muss.

Ich würde das wie gesagt den Compiler machen lassen. Der GCC kann zum Beispiel die Abhängigkeiten als Makefile ausgeben. Das lässt sich wesentlich einfacher weiterverarbeiten. Beispiel:

Code: Alles auswählen

bj@s8n:~$ g++ -MM test.cpp
test.o: test.cpp classuser.h
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

BlackJack hat geschrieben: Das ist nicht so trivial wie's auf den ersten Blick aussieht,
Wahre Worte aus deinem Munde. :-D

Ich werde morgen einmal die man für gcc studieren, anschließend muss ich aber schauen, ob ich für den Microsoft-Compiler auch funktioniert, wenn nicht könnte ich schauen, ob clearmake mir weiterhelfen kann.

Danke und Gruß
Markus
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Verwendest du MSBuild? Dafür hat mal jemand an $arbeit ein Script geschrieben, eventuell könnte ich das veröffentlichen. :)
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

Ich verwende Visual Studio 2005 und der Compilername cl.exe.

MSBuild ist meines Wissen auch dabei, wird aber von uns nicht benutzt.
Antworten