Quello che sto cercando è uno strumento che, dato un file sorgente radice, restituisce un grafico delle dipendenze dei file (con alcune personalizzazioni, ovviamente, come --maxdepth, ecc.)Strumento open source per visualizzare le dipendenze del file di intestazione C/C++?
risposta
volte prima. sempre la stessa risposta - doxygen.
doxygen ha un grafico delle dipendenze di file come uno dei suoi diversi output. Potrebbe non essere esattamente quello che vuoi, ma è un inizio.
So che non è open source (né linux, che non si menziona nella domanda ma è nei tag), ma ho trovato che la soluzione migliore a questo problema è ProFactor IncludeManager - era il migliore rispondi ad un question I asked che è praticamente un duplicato esatto della tua domanda, meno il bit open source (quindi perché non ho contrassegnato la tua domanda come una mia duplicazione).
Sembra proprio un attrezzo utile. Doxygen è abbastanza utile per mostrare inclusioni di file (specialmente le inclusioni tra gli alberi delle directory), ma è necessario uno strumento come questo per valutare l'effetto di esse e analizzare l'effetto della rimozione delle dipendenze non necessarie. –
Per gli impazienti, che, come me, vogliono solo un elenco di comandi e non RTFM :) Quindi, senza ulteriori indugi (ammesso che abbiate Debian, o il suo ilk) ...
In primo luogo, installare e Doxygen graphviz (che fornisce `punto' per disegnare grafi orientati):
apt-get install doxygen graphviz
Avanti, dica Doxygen per generare un file di configurazione iniziale che possiamo quindi modificare a mano:
doxygen -g
Questo si tradurrà in un nuovo file di configurazione, chiamato Doxyfile, generato nella directory corrente. Puoi quindi modificarlo con il tuo editor di testo preferito. Assicurarsi di impostare i seguenti flag per i valori specificati:
HAVE_DOT = YES
RECURSIVE = YES
EXTRACT_ALL = YES
GENERATE_LATEX = NO # Unless you want LaTeX output besides the HTML ...
Si potrebbe anche voler impostare le seguenti due bandiere per dire Doxygen dove generare la documentazione (che è fondamentalmente solo un mucchio di file organizzati in una directory struttura):
PROJECT_NAME = Foobar
OUTPUT_DIRECTORY = /tmp/foobar/doc
Tutto ciò che rimane è quello di raccontare doxygen a fare la sua cosa:
cd foobar/src
doxygen ~/Doxyfile # Assuming you saved Doxyfile in your home directory.
Ora, se si è fortunati, si può puntare il browser al file /tmp/foobar/doc/html/index.html, seleziona la scheda "File", quindi fai clic su un file di intestazione per esaminare due grafici: uno mostra i file di intestazione inclusi nel file di intestazione (direttamente o indirettamente), mentre l'altro mostra quali altri file includono direttamente o indirettamente il file di intestazione specificato.
+1: Ah, bella risposta. Stavo solo provando a usare Doxygen per generare un grafico del file include e mi sono chiesto perché non ha funzionato - ho scoperto che 'EXTRACT_ALL' non era impostato su' YES'. –
Sì, lo menziona nella documentazione, ma sembra funzionare solo per i file "documentati", secondo il manuale. In altre parole, se lo si esegue su un albero dei sorgenti, non genererà un grafico. A questo punto, a qualche esperto di doxygen piacerebbe suonare? –
È necessario creare un file di configurazione (o meglio ottenere doxygen per farlo per voi). È quindi necessario modificare il file per attivare alcune funzionalità. Normalmente non produco alberi pieni, quindi non ho un esempio da dare. –
Potresti chiamarlo per ignorare membri non documentati. Doxygen può sicuramente analizzare tutto, date le giuste opzioni. Controllare le seguenti opzioni: EXTRACT_ALL HIDE_UNDOC_MEMBERS HIDE_UNDOC_CLASSES Potrebbe anche essere necessario punto (via Graphviz) per generare diagrammi di classe e altre cose utili. –