2011-01-21 14 views
62

Ho cercato del materiale che descriva come generare semplici diagrammi di classi con doxygen, ma non è stato possibile trovarne uno. Qualcuno può aiutare?Come usare doxygen per creare diagrammi di classe UML dal sorgente C++

Ho bisogno di creare diagrammi come mostrato di seguito da un insieme di file C++. alt text

Se ci sono strumenti migliori per ottenere questo più facile, per favore fatemelo sapere.

risposta

42

Doxygen crea diagrammi di ereditarietà ma non penso creerà un'intera gerarchia di classi. Ti consente di utilizzare lo strumento GraphViz. Se si utilizza lo strumento di frontend di Doxygen GUI, le opzioni pertinenti sono disponibili in Step2: -> Wizard tab -> Diagrams. Le opzioni della relazione DOT si trovano nella scheda Esperto.

+6

Sarai in grado di navigare l'intera gerarchia, i limiti sono su ciò che viene visualizzato su un diagramma.Ci sono un paio di parametri che limitano l'ambito del grafico. DOT_GRAPH_NODES limita il numero di voci in una singola pagina e MAX_DOT_GRAPH_DEPTH limita la profondità delle informazioni. L'impostazione di questi valori di grandi dimensioni richiede molto tempo per un progetto di grandi dimensioni. – DanS

+0

+1 su questo - doxygen-gui funziona come un CHARM –

4

Penso che sarà necessario modificare il file doxys e impostare GENERATE_UML (qualcosa di simile) su true. E hai bisogno di dot/graphviz installato.

+11

Stai parlando dell'opzione UML_LOOK? –

38

Citazione di this post (è scritto dall'autore di doxygen se stesso):

run doxygen -g and change the following options of the generated Doxyfile: 

    EXTRACT_ALL   = YES 
    HAVE_DOT    = YES 
    UML_LOOK    = YES 

run doxygen again 
+7

Ciò non genererà un diagramma di classe completo (ad esempio, la relazione molti a uno tra la classe A e la classe B); solo un diagramma di ereditarietà, cioè che mostra relazioni di superclasse/sottoclasse. – stepthom

2

Enterprise Architect costruirà un diagramma UML dal codice sorgente importato.

+0

In aumento per rispondere anche alla domanda "Se ci sono strumenti migliori per ottenere questo più facile, per favore fatemelo sapere." – kaveish

14

Hmm, questo sembra essere un po 'di una vecchia questione, ma da quando ho pasticciare con la configurazione Doxygen ultimi giorni, mentre la mia testa è ancora pieno di informazioni attuali diamo una pugnalata a esso -

Penso che le precedenti risposte ce l'abbiano quasi:

L'opzione mancante è aggiungere COLLABORATION_GRAPH = YES nel Doxyfile. Presumo che tu possa fare la cosa equivalente da qualche parte nella GUI doxywizard (non uso doxywizard).

Così, come un esempio più completo, tipiche opzioni "Doxyfile" relative alla UML di uscita che io tendo a usare sono:

EXTRACT_ALL   = YES 
CLASS_DIAGRAMS  = YES 
HIDE_UNDOC_RELATIONS = NO 
HAVE_DOT    = YES 
CLASS_GRAPH   = YES 
COLLABORATION_GRAPH = YES 
UML_LOOK    = YES 
UML_LIMIT_NUM_FIELDS = 50 
TEMPLATE_RELATIONS = YES 
DOT_GRAPH_MAX_NODES = 100 
MAX_DOT_GRAPH_DEPTH = 0 
DOT_TRANSPARENT  = YES 

Queste impostazioni generare sia "eredità" (CLASS_GRAPH=YES) e "collaborazione" (COLLABORATION_GRAPH=YES) diagrammi.

In base all'obiettivo di "distribuzione" dell'uscita di doxygen, è inoltre possibile utilizzare DOT_IMAGE_FORMAT = svg. Con l'output svg i diagrammi sono "scalabili" invece della risoluzione fissa dei formati bitmap come .png. Apparentemente, se si visualizza l'output in browser diversi da IE, c'è anche INTERACTIVE_SVG = YES che consentirà "zoom interattivo e panning" dei diagrammi svg generati. L'ho provato un po 'di tempo fa, e l'output svg era molto attraente visivamente, ma al momento il supporto del browser per svg era ancora un po' incoerente, quindi spero che la situazione possa essere migliorata ultimamente.

Come altri commenti hanno menzionato, alcune di queste impostazioni (DOT_GRAPH_MAX_NODES in particolare) hanno potenziali impatti sulle prestazioni, quindi YMMV.

Io tendo a odiare le risposte in stile "RTFM", quindi scusami per questa frase, ma in questo caso la documentazione Doxygen è davvero tua amica, quindi controlla i documenti Doxygen nelle impostazioni sopra menzionate- l'ultima volta che ho guardato puoi trova i dettagli allo http://www.stack.nl/~dimitri/doxygen/manual/config.html.

+0

Buona risposta. Nella tua risposta hai scritto "CLASS _DIAGRAMS" invece se "CLASS_GRAPH". – DavidS

+0

Hmm, in realtà, ora lo fai apparire, vedo che ho sia CLASS_DIAGRAMS = YES che CLASS_GRAPH = YES. Dopo aver controllato i documenti per Doxygen 1.8.9.1 ho scoperto che in realtà CLASS_GRAPH = YES sovrascriverà CLASS_DIAGRAMS = YES in modo che le due opzioni interagiscano, con CLASS_GRAPH = SÌ che ha la precedenza. Quindi, in realtà, ai fini della domanda iniziale, quello che ho funzionerà, tuttavia, buona cattura! – user6092647

+0

puoi anche modificare OUTPUT_DIRECTORY e consentire la ricerca RECURSIVE –