Seite 1 von 1

Abhängigkeits-Diagramm

Verfasst: Dienstag 3. Juli 2007, 20:51
von lord.hong
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

Re: Abhängigkeits-Diagramm

Verfasst: Dienstag 3. Juli 2007, 21:11
von gerold
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

Verfasst: Dienstag 3. Juli 2007, 22:02
von 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.

Verfasst: Mittwoch 4. Juli 2007, 08:00
von lord.hong
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

Verfasst: Mittwoch 4. Juli 2007, 08:32
von 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

Verfasst: Mittwoch 4. Juli 2007, 19:38
von lord.hong
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

Verfasst: Mittwoch 4. Juli 2007, 19:48
von veers
Verwendest du MSBuild? Dafür hat mal jemand an $arbeit ein Script geschrieben, eventuell könnte ich das veröffentlichen. :)

Verfasst: Mittwoch 4. Juli 2007, 20:17
von lord.hong
Ich verwende Visual Studio 2005 und der Compilername cl.exe.

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