Herramienta para rastrear #include dependencias

¿Alguna buena sugerencia? La entrada será el nombre de un archivo de encabezado y la salida debe ser una lista (preferiblemente un árbol) de todos los archivos que lo incluyan directa o indirectamente.

Si tiene acceso a GCC / G ++, la opción -M arrojará la lista de dependencia. No hace ninguna de las cosas extra que hacen las otras herramientas, pero dado que proviene del comstackdor, no hay posibilidad de que recoja archivos del lugar “incorrecto”.

Gracias a KeithB. Busqué los documentos para cl.exe (VS2008) y encontré el indicador / showIncludes. Desde el IDE, esto se puede configurar desde la página de propiedades de cualquier archivo CPP.

Captura de pantalla

Para una solución de gran peso, deberías consultar Doxygen . Explora su código base y crea un sitio web, efectivamente, que documenta su código. Una de las muchas cosas que muestra es incluir árboles.

Si estaba buscando poder conectar el resultado de esta herramienta a otro proceso, puede que esto no funcione para usted (aunque Doxygen sí lo hace a otros formatos, no estoy muy familiarizado con esa función). Sin embargo, si simplemente quieres ver las dependencias, debería funcionar muy bien.

He jugado con una herramienta llamada cinclude2dot . Fue muy útil para obtener un control sobre una base de código bastante grande cuando vine a trabajar aquí. De hecho, he pensado en integrarlo en nuestra construcción diaria.

Primero, cinclude2dot.pl es una secuencia de comandos perl que analiza el código C / C ++ y produce un gráfico de dependencia #include como un archivo de puntos para la entrada en graphviz.

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

Si no quiere seguir el camino de ese tipo de herramienta manual, entonces el ganador de manos a la nada es, en mi opinión, una herramienta conocida como “IncludeManager” de ProFactor.

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

Hay una prueba gratuita, y es increíble. Se trata de un complemento para Visual Studio que está totalmente integrado, por lo que al hacer doble clic en algo aquí se accede al lugar donde está incluido allí.

Tooltip mouseover te brinda toda la información que deseas, y te permite profundizar, eliminar subárboles enteros que no te interesan, ver representaciones que no sean gráficos, recorrer una lista de coincidencias para esto y aquello, es maravilloso.

Si es rápido al respecto, puede refactorizar la estructura #include de proyectos grandes antes de que se agote la prueba. Aun así, no cuesta mucho, alrededor de $ 35 por licencia.

Por lo que hace, es casi perfecto. No solo # incluye gráficos, sino también las dependencias entre proyectos de archivos compartidos, el impacto en los tiempos de comstackción, las propiedades detalladas en las grillas, perfecto.

Buenas noticias: redhat Source-Navigator (también se ejecuta en Windows). Por supuesto, los modificadores del comstackdor (mencionados anteriormente) tienen un análisis superior y no estoy seguro de cómo manejará MFC, Qt y sus palabras clave mágicas.

Redhat Source-Navigator

Sobre la base de la respuesta de KeithB , aquí está la syntax de GNUmake para 1) generar automáticamente los archivos de dependencia, 2) mantenerlos actualizados, y 3) usarlos en su archivo MAKE:

 .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) 

(Asegúrese de cambiar esas sangrías a hardtabs).

Understand for C ++ debería ser capaz de ayudarte: construye una base de datos a la que puedes acceder desde Perl.

cscope ( http://cscope.sourceforge.net/ ) hace esto en un xterm independiente, y también se puede usar dentro de tu editor favorito; tiene excelentes emacs y compatibilidad con vi / vim.

Hay una herramienta gratuita Incluir monitor de dependencias de archivos