Documentación automática con Doxygen 4 de abril de 2008 () Documentación automática con Doxygen 4 de abril de 2008 1 / 16 1 Introducción 2 Cómo utilizar Doxygen 3 Documentación del código fuente () Documentación automática con Doxygen 4 de abril de 2008 2 / 16 ¿Qué es Doxygen? • Sistema de documentación para: C++, C, Java, Objective-C, Python, IDL, Fortran, VHDL, PHP, C# • Posibilidades: • Extrar la estructura del código fuente de un conjunto de ficheros que no han sido expresamente preparados para Doxygen • Generar documentación a partir de un cojunto de ficheros de código expresamente documentados al «estilo Doxygen » • Otras. • Formatos de salida soportados: • HTML • LATEX • RTF • Postscript, PDF • Unix man pages • Windows help compressed HTML • XML http://www.stack.nl/~dimitri/doxygen/ () Documentación automática con Doxygen 4 de abril de 2008 2 / 16 Instalación • GNU/Linux, línea de comando (por ejemplo, Debian) $ a p t i t u d e i n s t a l l doxygen $ aptitude i n s t a l l texlive $ a p t i t u d e i n s t a l l graphviz # LaTeX # Dibujar clases $ a p t i t u d e i n s t a l l doxygen−g u i # Opcional $ a p t i t u d e i n s t a l l doxymacs # Usa e l mejor e d i t o r ; − ) • GNU/Linux, interfaz gráfica (Synaptic, YAST,...) • Windows, Macintosh,... () Documentación automática con Doxygen 4 de abril de 2008 3 / 16 Cómo usar Doxygen 1 Partimos de fichero fuente (o un arbol de ficheros), 2 Creamos un fichero de configuración para Doxygen • Posiblemente, documentado «al estilo doxygen» • Conjunto de parámetros para generar la documenación 3 Ejecutamos Doxygen y obtenemos el resultado • Conjunto de ficheros HTML, LATEX, PDF... Para (2) y (3), dos posibilidades: (a) O bien usar editor de textos + línea de comandos (b) O bien usar una GUI () Documentación automática con Doxygen 4 de abril de 2008 4 / 16 El fichero de configuración para Doxygen Conjunto de sentencias de la forma: ETIQUETA = VALOR Cómo generar un fichero patrón: $ doxygen −g Algunas etiquetas contenidas en el fichero de configuración: PROJECT_NAME = <nombre d e l proyecto > INPUT = < f i c h e r o o d i r e c t o r i o a documentar > FILE_PATTERNS = < p a t r o n e s de f i c h e r o s a documentar > GENERATE_HTML = YES GENERATE_LATEX = YES EXTRACT_ALL = YES () Documentación automática con Doxygen 4 de abril de 2008 5 / 16 Generar salida HTML • El fichero de configuración debe contener: GENERATE_HTML = YES • Procesamos el código con Doxygen: $ doxygen • Por defecto, el resultado se encuentra en ./html • Algunas estiquetas útiles (más en el fichero patrón): HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = ... () Documentación automática con Doxygen 4 de abril de 2008 6 / 16 Generar salida LATEX/ PDF / PS • El fichero de configuración debe contener: GENERATE_LATEX = YES • Para PDF, es recomendable: PDF_HYPERLINKS = YES USE_PDFLATEX = YES • Procesamos el código con Doxygen: $ doxygen • Por defecto, el resultado se encuentra en ./latex • Se genera un Makefile que podemos utilizar: $ cd l a t e x $ make p d f () Documentación automática con Doxygen 4 de abril de 2008 7 / 16 Ejemplo 1. Análisis de la biblioteca C++ de GNU Octave • GNU Octave is a high-level language, primarily intended for numerical computations. • Descargamos el código y preparamos un fichero patrón para doxygen $ $ $ $ mkdir ejemplo1 ; cd ejemplo1 wget f t p : / / f t p . octave . org / pub / octave / octave − 3 . 0 . 0 . t a r . bz2 t a r x j f octave − 3 . 0 . 0 . t a r . bz2 doxygen −g • Editamos el fichero Doxyfile INPUT FILE_PATTERNS GENERATE_HTML GENERATE_LATEX EXTRACT_ALL = = = = = octave − 3 . 0 . 0 / l i b o c t a v e ∗.h YES NO YES • Ejecutamos doxygen y miramos el resultado: html/index.html () Documentación automática con Doxygen 4 de abril de 2008 8 / 16 Observaciones • Doxygen genera numerosos enlaces de forma automática: • Listado de ficheros • Listados de clases (alfabético/jeraquizado) y de miembros • En cada clase: • Enlace al fichero fuente • Enlace a documentación de cada miembro • ... • Por defecto, Doxygen genera automáticamente diagramas de herencia (CLASS_DIAGRAMS = YES) • Si está instalado graphviz (y si HAVE_DOT = YES) , puede generar diagramas se pueden generar gráficos avanzados: • Si GRAPHICAL_HIERARCHY = YES (por defecto), se crea un diagrama de jerarquía de clases (sólo HTML) • Si rCOLLABORATION_GRAPH = YES (por defecto), se crea un diagrama con herencia+uso entre clases • Etc (CALL_GRAP, CALLER_GRAPH,...) () Documentación automática con Doxygen 4 de abril de 2008 9 / 16 Ejemplo 2. Diagramas complejos 1 Utilizar el código que está en tallerDoxygen/ejemplo2 2 Generar documentación: 1 2 3 Con HAVE_DOT = NO Con HAVE_DOT = YES En el ejemplo anterior (librería de Octave), se podría haber hecho HAVE_DOT = YES, pero tarda mucho! () Documentación automática con Doxygen 4 de abril de 2008 10 / 16 Cómo documentar el código fuente • ¿Cómo documentar un elemento del código? Delante del elemento a documentar Bloque de documentación especial En otro lugar (menos habitual) • Ejemplo /∗∗ ∗ Una v a r i a b l e s i m p l e ∗/ i n t s i m p l e =0; • Cuando Doxygen «parsea» los bloques... • • • • • • Elimina asteriscos (*) Intepreta líneas en blanco como separadores de párrafos Crea enlaces entre clases y otros elementos documentados Ejecuta los comandos especiales que encuentra (@param, @see,..) Convierte comandos HTML en LATEX (para salida LATEX) ... () Documentación automática con Doxygen 4 de abril de 2008 11 / 16 Bloques de documentación (C/C++) • Varios estilos... • /∗∗ ∗ Comentario a l e s t i l o JavaDoc ∗/ • /∗ ! ∗ Comentario a l e s t i l o Qt ∗/ • // / / / / Comentarios C++ con una b a r r a a d i c i o n a l // / • / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ / / ∗ ∗ ∗ Un comentario muy v i s i b l e ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ / () Documentación automática con Doxygen 4 de abril de 2008 12 / 16 Bloques de documentación (C/C++) Descripción breve • Dos tipos de descripción (optativas) Documentación detallada • / ∗ ∗ @brief Descripción breve ∗ ∗ La descripción detallada empieza tras una línea en blanco ∗/ (también podríamos haber usado \brief: estilo Qt). • / / / Una línea especial de C++ aislada es documentación breve / / / El resto es descripción detallada • Si JAVADOC_AUTOBRIEF=YES / ∗ ∗ La descripción breve termina con un punto, como éste. El resto ∗ es la documentación detallada, bla, bla, bla... ∗/ () Documentación automática con Doxygen 4 de abril de 2008 13 / 16 Ejemplo 3. Clases C++ comentadas “a la Doxygen” • Idea: documentación de clases representando variantes de un metrónomo • El código está en tallerDoxygen/ejemplo3 () Documentación automática con Doxygen 4 de abril de 2008 14 / 16 Ejemplo 3... /∗∗ ∗ Metrónomo abstracto. Un metrónomo es algo capaz de latir a un ∗ determinado r i t m o ( expresado en l a t i d o s por minuto ) . ∗/ class Metronome { public : / ∗ D e s t r u c t o r , no documentado en Doxygen . ∗ / v i r t u a l ~Metronomo ( ) { } / ∗ ∗ Arrancar el metrónomo. ∗ / v i r t u a l void s t a r t ( ) const = 0 ; / ∗ ∗ Detener el metrónomo. ∗ / v i r t u a l void s t o p ( ) const = 0 ; /∗∗ F i j a r la velocidad . ∗ @param bpm v e l o c i d a d en l a t i d o s ( beats ) por minuto ∗ / v i r t u a l void set_bpm ( unsigned i n t bpm) const =0; / ∗ ∗ Obtener l a v e l o c i d a d . ∗ @return v e l o c i d a d en l a t i d o s ( beats ) por minuto ∗ / v i r t u a l unsigned i n t get_bpm ( ) const = 0 ; }; () Documentación automática con Doxygen 4 de abril de 2008 15 / 16 Ejemplo 3... /∗∗ ∗ Metrónomo abstracto. Un metrónomo es algo capaz de latir a un ∗ determinado r i t m o ( expresado en l a t i d o s por minuto ) . ∗/ class Metronome { public : / ∗ D e s t r u c t o r , no documentado en Doxygen . ∗ / v i r t u a l ~Metronomo ( ) { } / ∗ ∗ Arrancar el metrónomo. ∗ / v i r t u a l void s t a r t ( ) const = 0 ; / ∗ ∗ Detener el metrónomo. ∗ / v i r t u a l void s t o p ( ) const = 0 ; /∗∗ F i j a r la velocidad . ∗ @param bpm v e l o c i d a d en l a t i d o s ( beats ) por minuto ∗ / v i r t u a l void set_bpm ( unsigned i n t bpm) const =0; / ∗ ∗ Obtener l a v e l o c i d a d . ∗ @return v e l o c i d a d en l a t i d o s ( beats ) por minuto ∗ / v i r t u a l unsigned i n t get_bpm ( ) const = 0 ; }; () Documentación automática con Doxygen 4 de abril de 2008 16 / 16 Mucho más que decir... • Documentación en otros lenguajes • Inclusión de imágenes y fórmulas (sólo LATEXy HTML) • Agrupación de documentación en bloques de elementos con semántica común • Escritura de documentación en formato HTML • Etc ftp://ftp.stack.nl/pub/users/dimitri/doxygen_manual-1. 5.5.pdf.zip () Documentación automática con Doxygen 4 de abril de 2008 17 / 16