¿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, incluso de forma directa o indirecta.
Si tiene acceso a GCC / G ++, entonces el -M
opción generará la lista de dependencias. No hace ninguna de las cosas adicionales que hacen las otras herramientas, pero como proviene del compilador, no hay posibilidad de que recoja archivos del lugar "incorrecto".
-H
incluso da un árbol!
-MM
omite encabezados del sistema
-o
opción, el compilador escribirá la salida en el archivo en lugar de stdout.
stderr
lugar de stdout
. De lo contrario, esta opción es más general.
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.
math.h
Para una solución de peso pesado, debe consultar doxygen . Escanea a través de su base de código y aparece un sitio web, efectivamente, que documenta su código. Una de las muchas cosas que muestra es incluir árboles.
Si estaba buscando poder conectar la salida de esta herramienta a algún otro proceso, entonces esto puede no funcionar para usted (aunque doxygen sí da salida a otros formatos, no estoy muy familiarizado con esa característica). Sin embargo, si simplemente desea observar las dependencias, debería funcionar muy bien.
He jugado con una herramienta llamada cinclude2dot . Fue muy útil para manejar una base de código bastante grande cuando vine a trabajar aquí. De hecho, he pensado en integrarlo en nuestra construcción diaria eventualmente.
.cc/.c/.cxx
archivo en él (solo los .h
archivos) puede ser redundante.
Primero, cinclude2dot.pl es un script perl que analiza el código C / C ++ y produce un gráfico de dependencia #include como un archivo de puntos para ingresar en graphviz.
http://www.flourish.org/cinclude2dot/
Si no quiere seguir ese tipo de herramienta manual, entonces el ganador indiscutible es, en mi opinión, una herramienta conocida como "IncludeManager" de ProFactor.
http://www.profactor.co.uk/includemanager.php
Hay una versión de prueba gratuita, y es increíble. Es un complemento para Visual Studio que está totalmente integrado, por lo que hacer doble clic en algo aquí lo lleva al lugar donde está incluido allí.
Los mouseovers de información sobre herramientas le brindan toda la información que desea, y le permite profundizar / eliminar, eliminar subárboles enteros que no le 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 grandes proyectos antes de que se acabe 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 dependencias de proyectos compartidos de archivos compartidos, impacto en tiempos de compilación, propiedades detalladas en cuadrículas, perfecto.
Buenas noticias: redhat Source-Navigator (también se ejecuta en Windows). Por supuesto, los conmutadores de compilación (mencionados anteriormente) tienen un análisis superior y no estoy seguro de cómo manejará MFC, Qt y sus palabras clave mágicas.
Basándose en la respuesta de KeithB , aquí está la sintaxis 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 pestañas duras).
También puede consultar makedepend :
Comprenda que C ++ debería poder ayudarlo: crea una base de datos a la que puede acceder desde Perl.
cscope ( http://cscope.sourceforge.net/ ) hace esto en un xterm independiente, y también puede usarse dentro de su editor favorito: tiene un gran soporte para emacs y vi / vim.
Hay una herramienta gratuita que incluye el Observador de dependencias de archivos
#include
dependencias como cpp-dependencies , iwyu y dep-matrix, que es una herramienta bastante ingenua escrita en python.