Frage

Irgendwelche guten Vorschläge?Die Eingabe ist der Name einer Header-Datei und die Ausgabe sollte eine Liste (vorzugsweise ein Baum) aller Dateien sein, die diese direkt oder indirekt enthalten.

War es hilfreich?

Lösung

Wenn Sie Zugriff auf GCC/G++ haben, dann ist das -M Möglichkeit gibt die Abhängigkeitsliste aus.Es macht keine der zusätzlichen Aufgaben, die die anderen Tools machen, aber da es vom Compiler kommt, besteht keine Chance, dass es Dateien vom „falschen“ Ort abholt.

Andere Tipps

Danke an KeithB.Ich habe in den Dokumenten für cl.exe (VS2008) nachgeschlagen und das Flag /showIncludes gefunden.In der IDE kann dies auf der Eigenschaftenseite jeder CPP-Datei festgelegt werden.

Screen shot

Wenn Sie eine schwere Lösung suchen, sollten Sie sich umsehen Sauerstoff.Es durchsucht Ihre Codebasis und erstellt praktisch eine Website, die Ihren Code dokumentiert.Eines der vielen Dinge, die es zeigt, ist die Einbeziehung von Bäumen.

Wenn Sie die Ausgabe dieses Tools in einen anderen Prozess integrieren möchten, funktioniert dies möglicherweise nicht für Sie (obwohl doxygen in andere Formate ausgibt, bin ich mit dieser Funktion nicht wirklich vertraut).Wenn Sie jedoch nur die Abhängigkeiten betrachten möchten, sollte es großartig funktionieren.

Ich habe mit einem Tool namens herumgespielt cinclude2dot.Es war sehr nützlich, um eine ziemlich große Codebasis in den Griff zu bekommen, als ich hier anfing zu arbeiten.Ich habe tatsächlich darüber nachgedacht, es irgendwann in unseren täglichen Build zu integrieren.

Erstens ist cinclude2dot.pl ein Perl-Skript, das C/C++-Code analysiert und einen #include-Abhängigkeitsgraphen als Dot-Datei zur Eingabe in graphviz erstellt.

http://www.flourish.org/cinclude2dot/

Wenn Sie nicht auf ein solches manuelles Tool zurückgreifen möchten, ist meiner Meinung nach der eindeutige Gewinner ein Tool namens „IncludeManager“ von ProFactor.

http://www.profactor.co.uk/includemanager.php

Es gibt eine kostenlose Testversion, und sie ist großartig.Es handelt sich um ein Plug-In für Visual Studio, das vollständig integriert ist. Wenn Sie also hier auf etwas doppelklicken, gelangen Sie zu der Stelle, an der es dort eingebunden ist.

Tooltip-Mouseovers liefern Ihnen alle Informationen, die Sie benötigen, und Sie können einen Drilldown/Up durchführen, ganze Teilbäume entfernen, die Sie nicht interessieren, andere Darstellungen als Diagramme anzeigen und durch eine Liste mit Übereinstimmungen für dieses und jenes blättern – das ist wunderbar.

Wenn Sie schnell sind, können Sie die #include-Struktur eines großen Projekts umgestalten, bevor die Testversion abläuft.Trotzdem kostet es nicht viel, etwa 35 US-Dollar pro Lizenz.

Für das, was es leistet, ist es nahezu perfekt.Nicht nur #include-Diagramme, sondern auch projektübergreifende Abhängigkeiten gemeinsam genutzter Dateien, Auswirkungen auf Build-Zeiten, detaillierte Eigenschaften in Rastern, perfekt.

Gute Nachrichten: redhat Source-Navigator (Läuft auch unter Windows).Natürlich verfügen Compiler-Switches (bereits erwähnt) über eine bessere Analysefunktion, und ich bin mir nicht sicher, wie sie mit MFC, Qt und ihren magischen Schlüsselwörtern umgehen werden.

redhat Source-Navigator

Aufbauend auf KeithBs Antwort, hier ist die GNUmake-Syntax, um 1) die Abhängigkeitsdateien automatisch zu generieren, 2) sie auf dem neuesten Stand zu halten und 3) sie in Ihrem Makefile zu verwenden:

.dep:
    mkdir $@
.dep/%.dep: %.c .dep
    (echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
    (echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)

(Stellen Sie sicher, dass Sie diese Einzüge in Hardtabs ändern.)

Für C++ verstehen sollte dir weiterhelfen können:Es erstellt eine Datenbank, auf die Sie von Perl aus zugreifen können.

cscope (http://cscope.sourceforge.net/) erledigt dies in einem eigenständigen xterm und kann auch in Ihrem Lieblingseditor verwendet werden – es bietet großartige Emacs- und vi/vim-Unterstützung.

Es gibt ein kostenloses Tool Dateiabhängigkeits-Watcher einschließen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top