Guía de Documentación con Doxygen
Guía de Documentación con Doxygen
Tutorial
Resumen
Doxygen es una herramienta para generar documentación a partir
del código fuente. Es un sistema de documentación para C++, C, Ja-
va, ObjectiveC, Python, IDL (Corba and Microsoft flavors), Fortran,
VHDL, PHP, C#.
1
Índice
1. Instalación 4
2. Compilación 4
3. Comenzar 5
5. Generando la documentación 7
5.1. Salida HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2. Salida LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.3. Salida RTF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.4. Salida XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.5. Salida Man . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6. Documentando el código 8
9. Listas 13
9.1. Usando signos menos . . . . . . . . . . . . . . . . . . . . . . . 13
9.2. Usando comandos HTML . . . . . . . . . . . . . . . . . . . . 14
[Link] 15
10.1. Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
10.2. Grupos de miembros . . . . . . . . . . . . . . . . . . . . . . . 15
10.3. Subpaginar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
10.4. Incluı́r fórmulas . . . . . . . . . . . . . . . . . . . . . . . . . . 16
[Link]́ficos y diagramas 18
2
[Link] 20
13.1. Alias simples . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
13.2. Alias con argumentos . . . . . . . . . . . . . . . . . . . . . . . 20
13.3. Anidando comandos . . . . . . . . . . . . . . . . . . . . . . . 21
[Link] Especiales 24
15.1. Formato de texto . . . . . . . . . . . . . . . . . . . . . . . . . 24
15.2. Indicadores Estructurales . . . . . . . . . . . . . . . . . . . . 25
15.3. Indicadores de sección . . . . . . . . . . . . . . . . . . . . . . 27
15.4. Indicadores de links . . . . . . . . . . . . . . . . . . . . . . . 28
15.5. Bloques especiales de documentación en VHDL . . . . . . . . 29
15.6. Otros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
[Link] 30
3
1. Instalación
Primero necesita obtener la última versión de Doxygen de la página web:
[Link]
Además usted necesitará:
Para hacer uso de todas las caracterı́sticas de Doxygen, deberá instalar tam-
bien las siguientes herramientas:
Un intrprete de ghostscript.
2. Compilación
Compilación:
1. gunzip doxygen$[Link] descomprime el archivo.
2. tar xf doxygen$[Link] desempaqueta el archivo.
3. ejecute el script configure: sh ./configure
Para conocer todas las opciones para usar el configure ejecute:
configure help
Compile el programa ejecutando:
make
El programa deberı́a compilar sin problemas y tres binarios deberı́an
crearse en el directorio bin de la distribución.
Opcional: Generar el manual del usuario ejecutando:
make docs
Luego de compilar las fuentes ejecute un make install para instalar doxy-
gen.
4
3. Comenzar
El ejecutable doxygen es el programa principal que analiza el código y
genera la documentación.
El ejecutable doxytag es necesario solo si desea generar referencias a
documentación externa de la que no tiene las fuentes.
De manera opcional, puede ser usado el ejecutable doxywizard, que es
una interfaz grafica para editar el archivo de configuración.
El siguiente gráfico muestra la relación entre las herramientas y el flujo
de información entre ellas:
5
4. Crear un archivo de configuración
Doxygen usa un archivo de configuración para determinar todas sus op-
ciones. Cada proyecto deberı́a tener su propio archivo de configuración.
Para simplificar la creación de este archivo, doxygen puede crear uno con
el comando:
doxygen g configfile
donde <configfile>es el nombre del archivo de configuración, si se omite
el nombre del archivo, se creará uno llamado doxyfile. Si ya existe un archivo
con el mismo nombre, doxygen renombrará el actual a <configfile>.bak antes
de generar el nuevo.
El archivo de configuración tiene un formato similar al de un Makefile;
consiste en un numero de asignaciones (tags) de la forma:
TAGNAME = VALUE
Si comienza a usar doxygen para un proyecto existente, puede hacerse
una idea de como es la estructura y de como resultará la documentación
poniendo la tag EXTRACT ALL = YES.
Si no desea editar el archivo de configuración con un editor de texto,
puede usar doxywizard, una interfaz gráfica que puede crear, leer y editar los
archivos de configuración del doxygen de manera gráfica y sencilla.
Para pequeños proyectos de pocos C/C++ fuentes y headers, puede dejar
la tag INPUT vacı́a y doxygen buscará por fuentes en el directorio actual.
Si tiene un proyecto mas grande debe asignar los directorios o directorio
raı́z a la tag INPUT, y agregar uno o mas patrones de archivos (*.c, *.h,
etc.)a la tagFILE PATTERNS . Sólo los archivos que coinciden con estos
patrones serán analizados. Para un análisis recursivo de un árbol de fuentes,
la tagRECURSIVE debe tener valor YES.
6
5. Generando la documentación
Para generar la documentación debe ingresar:
doxygen configfile
Dependiendo de sus opciones, doxygen creará los directorios html, rtf,
latex, xml y/o man.
El directorio de salida por defecto es en el que doxygen se ha iniciado. El
directorio raiz en el cual se escribe la salida de doxygen puede modificarse
usando
OUTPUT DIRECTORY . El directorio especifico de formato dentro del
directorio de salida puede ser seleccionado usando las HTML OUTPUT,
RTF OUTPUT,
LATEX OUTPUT, XML OUTPUT, y MAN OUTPUT tags del archivo
de configuración.
7
información es codificada usando campos. Para mostrar el valor real usted
necesita seleccionar todo (Edit Select All) y luego alternar campos.
6. Documentando el código
Si la opción EXTRACT ALL tiene el valor NO en el archivo de confi-
guración (opción por defecto), doxygen sólo generará documentación para
miembros documentados, archivos, clases, etc. Para documentar hay dos
opciones:
Los archivos solo pueden ser documentados de la segunda forma. Las fun-
ciones, variables, typedefs, defines, no necesitan un comandodas las lı́neas
vacı́as resultantes son tratadas como separadores de párrafos.
Esto evita que se deban agregar comandos de nuevo párrafo para lograr
una documentación mas legible.
· Los links son creados para palabras que corresponden a clases documen-
tadas (a menos que la palabra es precedida por %, en este caso la palabra
no será enlazada y el signo % será eliminado).
8
· Los links a miembros son creados cuando se encuentran ciertos patrones
en el texto.
· Los marcadores HTML que están en la documentación son interpretados
y transformados en equivalente.
9
7. Bloques especiales de documentación
Es un bloque de documentación de C o C++ con algunas marcas adi-
cionales, ası́ doxygen puede reconocerlo y generar su documentación.
Para cada ı́tem del código existen dos ( a veces tres) tipos de descripcio-
nes que juntas forman la documentación: una descripción brief (breve) de
una lı́nea y una descripción detailed (detallada) mas extensa. Para todos y
funciones tambin existe una descripción llamada in body (en cuerpo), que
consiste en la concatenación de todos los bloques de documentación encon-
trados en el cuerpo de la función.
Existen varias formas de marcar un bloque de comentario como una
descripción detallada:
JavaDocs alternativa es usar un bloque de al menos dos lineas de comen-
tarios de C++, donde cada lı́nea comienza con un / o ! adicional
///
/// comentarios.
///
o bien
//!
//! comentarios
//!
/******************************//**
*.comentarios..
*********************************/
o bien
//////////////////////////////////
/////comentarios..
//////////////////////////////////
10
Para las descripciones breves (brief) tambin existen varias posibilidades:
Puede usar el comando\brief con alguno de los bloques de comentarios
anteriores.
Este comando termina al final del párrafo, ası́ la descripción detallada
continúa luego de una lı́nea en blanco.
/*!\brief descripción breve.
* continua la descripción brermina en el primer punto seguida de un
espacio o una nueva lı́nea.
o bien
11
O bien
12
8. Documentación en otros sitios
Hasta ahora hemos asumido que los bloques de documentación están
siempre ubicados al frente de una declaración o definición de un archivo,
clase o namespace o delante o detrás de un miembro. Puede haber ocasiones
en las que se desee comentar en otros sitios.
Doxygen le permite colocar bloques de documentación prácticamente en
cualquier sitio, la excepción es dentro del cuerpo de una función o dentro de
un bloque de comentarios normal en C style.
Lo que se necesita es un comando estructural dentro del bloque de do-
cumentación, lo que conlleva a algunas duplicaciones de información. Por lo
tanto en la práctica es recomendable evitarstos comandos a menos que otros
requerimientos lo fuercen.
Los comandos estructurales (como todos los otros comandos) comienzan
con un backslash (\), o un arroba ()
Para documentar una función global en C, typedef, enum o definición del
preprocesador, primero debe documentar el archivo que lo contiene (usual-
menteste será un archivo header).
9. Listas
Doxygen provee varias maneras de crear listas de ı́tems:
/**
* Texto anterior a la lista
* - item lista 1
* - sub item 1
* - sub sub item 1
* - sub sub item 2
13
* .
* El punto de arriba significa que termina la lista
* de sub sub items.
* Mas texto del primer sub item.
* .
* El punto de arriba termina la lista de sub items.
* Mas texto para el primer item de la lista.
* - sub item 2
* - sub item 3
* - list item 2
* .
* Mas texto en el mismo parrafo.
*
* Mas texto en un nuevo parrafo.
*/
14
10. Agrupar
Doxygen posee tres mecanismos para agrupar. Un mecanismo trabaja a
nivel global, creando una nueva página para cada grupo. Estos grupos son
llamados modulos en la
documentación. El segundo mecanismo trabaja dentro de una lista de
miembros de alguna entidad compuesta y es llamado grupos de miembros
(member groups). Para las páginas existe un tercer mecanismo llamado sub-
paginar (subpaging).
10.1. Módulos
Módulos es una manera de agrupar cosas en páginas separadas. Se puede
documentar un grupo como un todo, ası́ tambin como todos los miembros
individuales. Los miembros de un grupo pueden ser archivos, namespaces,
clases, funciones, variables, enums, typedefs y defines, pero tambin otros
grupos.
Para definir un grupo debe colocarse el comando \defgroup en un blo-
quero de un grupo especı́fico colocando un comando \ingroup dentro de su
bloque de documentación.
Para evitar colocar comandos \ingroup en la documentación por cada
miembro, se puede agrupar miembros abriendo un marcador antes del grupo
y el marcador de cierre despus del grupo.
Los grupos tambin pueden ser anidados usando stos marcadores de gru-
pos.
//@\{
\...
//@}
bloque ó
/*@{*/
\...
15
/*@}*/
10.3. Subpaginar
La información puede ser agrupada en páginas usando los comandos
\page y \mainpage.
Normalmente, esto resulta en una lista plana de páginas, donde la página
main es la primera en la lista.
es \f$\sqrt{(x_2x_1)^2+(y_2y_1)^2}\f$.
16
\f[
|I_2|=\left| \int_{0}^T \psi(t)
\left\{
u(a,t)
\int_{\gamma(t)}^a
\frac{d\theta}{k(\theta,t)}
\int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi
\right\} dt
\right|
\f]
\f{eqnarray*}{
g &=& \frac{Gm_2}{r^2} \\
&=& \frac{(6.673 \times 10^{11}\,\mbox{m}^3\,
\mbox{kg}^{1}\,
\mbox{s}^{2})(5.9736 \times 10^{24}\,
\mbox{kg})}{(6371.01\,\mbox{km})^2} \\
&=& 9.82066032\,\mbox{m/s}^2
\f}
17
11. Gráficos y diagramas
Doxygen puede crear gráficos, generados por la herramienta dot de Graph-
viz ([Link] La generación de gráficos en Doxygen gene-
ralmente se realiza automaticamente basada en las opciones del archivo de
configuración. Estas opciones con excepción de DOT PATH pueden tener
los valores YES o NO. Estas son opciones globales para el proyecto. Los grá-
ficos sólo serán generados si la herramienta dot está instalada, y la opción
HAVE DOT está en YES en el archivo de configuración.
18
archivo. Para las páginas man no se generan referencias. Las próximas
secciones muestran como generar links a las entidades documentadas
en un archivo fuente.
Todas las palabras que contengan un punto (.) que no sea el último
caracter de la palabra son considerados nombres de archivos. Si la pa-
labra es el nombre de un archivo documentado de entrada, se generará
automáticamente un link a la documentación de ese archivo.
1. <functionName>"("<argument-list>")"
2. <functionName>"()"
3. "::"<functionName>
4. (<className>"::")n<functionName>"("<argument-list>")"
5. (<className>"::")n<functionName>"("<argument-list>")"<modifiers>
6. (<className>"::")n<functionName>"()"
7. (<className>"::")n<functionName>
con n>0
12.5. typedefs
19
13. Comandos
Doxygen provee un gran número de comandos especiales, comandos
XML y comandos HTML, que pueden ser usados para realzar o es-
tructurar la documentación dentro de un bloque de comentario. Si por
alguna razón existe la necesidad de definir un nevo comando, se puede
utilizar una definicion ALIAS. La definición de un alias debe ser espe-
cificada en el archivo de configuración usando el tag de configuración
ALIASES.
ó
20
ALIASES += l{2}="\ref \1 \"\2\""
ALIASES += Bold{1}="<b>$\backslash$1</b>"
ALIASES += Emph{1}="<em>$\backslash$1</em>"
21
14. Links a documentación externa
22
Un tag file no contiene información sobre dónde se encuentra la docu-
mentación externa. Ésto podrı́a ser un directorio o una URL. Entonces
cuandos e incluye un tag file, debe especificar el lugar en que se en-
cuentran. Existen dos formas de hacer esto:
23
15. Comandos Especiales
Todos los comandos en la documentación comienzan con un backslash
(\)o un arroba (@). Algunos comandos tienen uno o mas argumentos.
Cada argumento tiene un cierto rango:
24
15.2. Indicadores Estructurales
• \ addtogroup <nombre>[(titulo)] Define un grupo igual que
\defgroup, pero en contraste, usando <nombre>mas de una vez
no resultara en un warning, sino en un grupo con la documenta-
cion combinada y el primer titulo que encuentre en alguno de los
comandos. El titulo es opcional, por lo tanto este comando tam-
bien puede ser utilizado para agregar un numero de entidades a
un grupo existente usando @ y @.
• \callgraph Cuando este comando es colocado en un bloque de
comentarios de una funcion y HAVE DOT esta en Yes, doxygen
generara un grafico de llamadas para esa funcion. El grafico sera
generado a pesar del valor que tenga CALL GRAPH.
• \callergraph Cuando este comando es colocado en un bloque de
comentarios de una funcion, y HAVE DOT esta en Yes, doxy-
gen generara un grafico de llamador de funciones para esa fun-
cion. El grafico sera generado a pesar del valor que tenga CA-
LLER GRAPH.
• \class <nombre>[<archivo-header>] [<nombre-header>]
Indica que un bloque de comentarios contiene documentacion pa-
ra una clase con el nombre <nombre>.
• \def <nombre> Indica que un bloque de comentarios contiene
documentacion para un macro #define.
• \defgroup <l><t> Define un grupo de módulo con etiqueta 1
y tı́tulo t.
• \enum <nombre> Indica que un bloque de comentarios contie-
ne documentacion para una enumeracion con nombre <nombre>.
• \example <nombre-archivo> Indica que un bloque de comen-
tarios contiene documentacion de un ejemplo de codigo fuente. El
nombre del archivo fuente es <nombre-archivo>. EL texto de este
archivo sera incluido en la documentacion, inmediatamente des-
pues de la documentacion contenida en el bloque de comentarios.
Todos los ejemplos son colocados en una lista. Puede incluirse
parte del path en <nombre-archivo>en el caso de que el nombre
no sea unico. Si es necesario mas de un archivo fuente para el
ejemplo, puede utilizarse el comando \include.
• \file [<nombre>] Indica que un bloque de comentarios contiene
documentacion para un fuente o archivo header con el nombre
<nombre>. El archivo puede incluir (parte de) el “path” si no
es unico. Si el nombre del archivo es omitido, entonces el bloque
de documentacion que contiene el comando \file pertenecera al
archivo en el que se encuentra. Importante: La doucmentacion de
25
funciones globales, variables, typedefs y enum solo seran incluidas
en la salida si el archivo en el que se encuentran tambien esta
documentado.
• \fn (declaracion de funcion) Indica que un bloque de comen-
tarios contiene documentacion de una funcion. Este comando solo
es necesario si un bloque de comentarios no se encuentra delante o
detras de la declaracion o definicion de la funcion. Si el bloque de
comentarios esta delante de la declaracion, este comando puede
(y para evitar redundancia deberia) ser omitido. Una declaracion
de funcion completa, incluyendo argumentos debe ser especifica-
da a continuacion del comando en una sola linea. Importante: No
use este comando a menos que sea absolutamente necesario, ya
que lleva a la duplicacion de informacion, y en consecuencia a
errores.
• \hideinitializer Oculta el valor por defecto de #define.
• \ingroup <l1>[<l2>] Agrega documentacion al grupo [Link]-
tiples grupos pueden ser usados.
• \interface <n> Bloque de documentaciön para la interface n.
• \internal Todo el texto a continuación es sustraı́do hasta el final
del bloque de comentarios.
• \mainpage (t) El bloque de documentación del main o index.
• \name (header) Bloque de documentación de grupo de miem-
bros.
• \nosubgrouping Desactiva el subagrupamiento (subgrouping).
• \overload (s) Utilizado para documentar una funcion overloaded
con firma s.
• \package <n> Un bloque de documentación para el package n.
• \page <n>(t) Indica un bloque de documentación de un grupo
de página con etiqueta n y tı́tulo t.
• \showinitializer Muestra el valor por defecto de define.
• \struct <n> Bloque de documentación para una estructura n.
• \typedef (t) Bloque de documentación para un typedef t.
• \union <n> Bloque de documentación para la union n.
• \var (v) Bloque de documentación para la variable v.
• \weakgroup <n> Equivalente a \addtogroup pero tiene menor
prioridad en la resolución de conflictos de grupos.
26
15.3. Indicadores de sección
• \attention ... Comienza un párrafo de Atención.
• \author loa Incluye la lista de autores loa.
• \brief ... Una breve descripción del elemento.
• \bug ... Descripción de un bug.
• \cond <sec> Comienza una sección condicional.
• \date ... Incluye la fecha.
• \deprecated ... Comienza un párrafo desaprobado.
• \else Cláusula adicional al comando \if.
• \elseif <sec> Cláusula adicional al comando \cond.
• \endcond Finaliza una sección condicional.
• \endif Finaliza una cláusula \if.
• \exception <e> Comienza una descripción de la excepción para
e.
• \if <sec> Comienza una sección condicional.
• \ifnot <sec> Comienza una sección condicional.
• \invariant ... Comienza una decripción de un invariant.
• \note ... Comienza un párrafo de notas.
• \par (t) ... Comienza un párrafo con un tı́tulo opcional t.
• \param <p>... Comienza una descripción del parámetro p.
• \post ... Comienza una descripción de una post-condición.
• \pre ... Comienza una descripción de una pre-condición.
• \remarks ... Comienza un párrafos de observaciones.
• \return ... Comienza una descripción de valores de retorno.
• \retval <f>... Describe el valor de retorno de una función f.
• \sa ref Comienza un párrafo See Also.
• \see ref Equivalente a \sa.
• \since ... Describe desde cuando una entidad estuvo disponible.
• \test ... Comienza un párrafo de descripción ”test case”.
• \throw <e>... Equivalente a excepción.
• \todo ... Comienza un párrafo To Do.
• \version ... Comienza un párrafo donde puede ingresar la ver-
sión.
• \warning ... Comienza un párrafo para mensajes de alerta.
• \xrefitem <k>(h) . Crea un párrafo cross-referenced.
27
15.4. Indicadores de links
• \addindex (t) Agrega t al index de LATEX.
• \anchor (w) Coloca un anchor invisible w en el documento.
• \endlink Finaliza un link.
• \link <n>... Crea un link a n con texto especificado por el
usuario.
• \ref <n>(t) Crea una referencia a n con texto t.
• \subpage <n>(t) Crea una sub-página de nombre n.
• \section <l>(t) Crea una sección en una página con etiqueta 1
y tı́tulo t.
• \subsection <l>(t) Crea una sub-sección en una página con
etiqueta 1 y tı́tulo t.
• \paragraph <n>(t) Crea un párrafo en una página con etique-
ta 1 y tı́tulo t.
28
15.5. Bloques especiales de documentación en VHDL
-------------------------------------------------------
--! @file
--! @brief 2:1 Mux using with-select
-------------------------------------------------------
29
end architecture;
15.6. Otros
• \ % Este comando escribe el simbolo % a la salida.
• \>+ Este comando escribe el simbolo > a la salida.
• \<+ Este comando escrible el sı́mbolo < a la salida.
• \# Este comando escribe el sı́mbolo # a la salida.
• \$ Este comando escrible el sı́mbolo $ a la salida.
• \& Este comando escribe el simbolo & a la salida.
16. Referencias
30