¿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.Herramienta para rastrear #include dependencias
Respuesta
Si tiene acceso a GCC/G ++, el -M
option dará salida a la lista de dependencias. No hace ninguna de las cosas extra que hacen las otras herramientas, pero dado que proviene del compilador, no hay posibilidad de que recoja archivos del lugar "incorrecto".
Para obtener una solución de gran peso, debe 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 la salida 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 característica). 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.
Esta herramienta funciona excepcionalmente bien. Tuve problemas con g ++ 's -M y doxygen. – sleeparrow
Escribí un script de python para leer la salida de cinclude2dot y obtener toda la dependencia en un mapa y luego hacer depth-first-traversal para finalmente generar un bosque de fuentes. El bosque que no tiene ningún archivo '.cc/.c/.cxx' en eso (solo los archivos' .h' en él) puede ser redundante. – shuva
Understand for C++ debería ser capaz de ayudarlo: crea una base de datos a la que puede acceder desde Perl.
También puede comprobar fuera de makedepend:
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.
Esto es * extremadamente * útil para resolver algunos errores/advertencias de compilación muy difíciles. ¡Muchas gracias! –
¡Esto también es ** extremadamente ** útil al tratar de optimizar los encabezados precompilados! – fmuecke
Cuando trabajo en VS, creo que esta es la solución más rápida para resolver mi problema ~ :-) – yaobin
Buenas noticias: redhat Source-Navigator (se ejecuta en Windows también). Por supuesto, los modificadores del compilador (mencionados anteriormente) tienen un análisis superior y no estoy seguro de cómo manejará MFC, Qt y sus palabras clave mágicas.
cscope (http://cscope.sourceforge.net/) hace de una xterm independiente, y también se puede utilizar dentro de su editor favorito - que tiene grandes emacs y soporte vi/vim.
Basándose en KeithB's answer, aquí es la sintaxis gnumake de forma automática 1) generar los archivos de dependencia, 2) mantenerlos al día, y 3) los usa en su makefile:
.dep:
mkdir [email protected]
.dep/%.dep: %.c .dep
(echo [email protected] \\; $(CC) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false)
.dep/%.dep: %.cpp .dep
(echo [email protected] \\; $(CXX) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)
(Asegúrese de cambiar esas sangrías a hardtabs.)
Primero, cinclude2dot.pl es un script perl que analiza el código C/C++ y produce un #include dependency graph como un archivo de puntos para la entrada en graphviz.
http://www.flourish.org/cinclude2dot/
Si no desea seguir el camino de ese tipo de herramienta manual, a continuación, las manos hacia abajo por el ganador ahora 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 impresionante. 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 mouseovers le ofrece toda la información que le gustaría, y le permite profundizar, 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 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 compilación, las propiedades detalladas en las grillas, perfecto.
He utilizado satisfactoriamente IncludeManager en mi proyecto C. Estoy usando Visual Studio 2013. – smwikipedia
- 1. Herramienta para mostrar las dependencias de ensamblaje
- 2. ¿Cómo rastrear las dependencias del sistema?
- 3. ¿Cómo rastrear dependencias de plugins en maven2?
- 4. Herramienta para rastrear y visualizar el comportamiento pthread en Linux
- 5. ¿Tiene pycharm alguna herramienta para rastrear el tiempo?
- 6. Herramienta para rastrear la pérdida de memoria de JavaScript
- 7. Herramienta correcta para rastrear cambios en la estructura de DB
- 8. Herramienta para descubrir dependencias de código .NET (no VS2010)
- 9. Herramienta de compilación y administración de dependencias para JavaScript
- 10. Herramienta para eliminar dependencias innecesarias en un proyecto Java
- 11. ¿Tiene NLTK una herramienta para el análisis de dependencias?
- 12. Herramienta de línea de comandos para encontrar dependencias Dll
- 13. Búsqueda de herramienta para mostrar gráficamente dependencias de archivos (encabezado) en C/C++
- 14. Oracle: ¿hay alguna herramienta para rastrear consultas, como Profiler para el servidor sql?
- 15. PHP Include para HTML?
- 16. ¿Hay una herramienta de línea de comandos TFS para rastrear un conjunto de cambios entre ramas?
- 17. ¿Herramientas/mejores prácticas para administrar dependencias de aplicaciones?
- 18. ¿Cómo rastrear un proceso para llamadas al sistema?
- 19. #include anywhere
- 20. #include <malloc.h> - Xcode
- 21. ¿Herramienta de código abierto para visualizar las dependencias de archivo de cabecera C/C++?
- 22. Herramienta de compilación y gestión de proyectos para compilación y dependencias de iOs
- 23. Herramienta para graficar dependencias en un archivo de compilación Ant y sus importaciones
- 24. C++: herramienta para reducir las dependencias de tiempo de compilación automáticamente
- 25. La dependencia de conjunto de Maven establecida con include no detecta las dependencias transitivas
- 26. Cómo rastrear y comprobar las dependencias en las gemas de Ruby agrupadas
- 27. dependencias mínimas para JasperReports
- 28. Personalización de include-guard para Eclipse CDT
- 29. Usando #include para cargar el código OpenCL
- 30. Algoritmo utilizado en Ruby para "String # include?"
Esto es similar a (pero no un duplicado de) http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files- in-a-large-c-project –
No se trata de un "favorito" incluye se muestran muy bien en gcc, pero msvs no. Entonces nosotros (yo) estamos buscando cualquier herramienta. – fantastory
¿Por qué sigo encontrando preguntas "fuera del tema" tan útiles? – jfritz42