diff options
Diffstat (limited to 'doc/starting.doc')
-rw-r--r-- | doc/starting.doc | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/doc/starting.doc b/doc/starting.doc new file mode 100644 index 0000000..1d3cbcd --- /dev/null +++ b/doc/starting.doc @@ -0,0 +1,411 @@ +/****************************************************************************** + * + * $Id$ + * + * Copyright (C) 1997-1999 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * All output generated with Doxygen is not covered by this license. + * + */ +/*! \page starting Getting started + +The executable \c doxygen is the main program that parses the sources and +generates the documentation. See section \ref doxygen_usage for more +detailed usage information. + +The executable \c doxytag is only needed if you want to generate references +to external documentation (i.e. documentation that was generated by Doxygen) +for which you do not have the sources or to create a search index for +the search engine. See section \ref doxytag_usage for more detailed usage +information. + +The executable \c doxysearch is only needed if you want to use the search +engine. See section \ref doxysearch_usage for more detailed usage information. + +\subsection step1 Step 1: Creating a configuration file + +Doxygen uses a configuration file to determine all of its settings. +Each project should get its own configuration file. A project can consist +of a single source file, but can also be an entire source tree that is +recursively scanned. + +To simplify the creation of a configuration file, Doxygen can create a +template configuration file for you. To do this call \c doxygen with the \c -g +option: + +\verbatim +doxygen -g <config-file> +\endverbatim +where \<config-file\> is the name of the configuration file. If you omit +the file name, a file named \c Doxyfile will be created. If a file with the +name \<config-file\> already exists, Doxygen will rename it to +\<config-file\>.bak before generating the configuration template. + +The configuration file has a format that is similar to that of a (simple) +Makefile. It contains of a number of assignments (tags) of the form: + +<tt>TAGNAME = VALUE</tt> or <br> +<tt>TAGNAME = VALUE1 VALUE2 ... </tt><br> + +You can probably leave the values of most tags to their default value. + +The \c INPUT tag is the only tag for which you are required to provide +a value. See section \ref config for more details about the configuration file. +For a small project consisting of a few C and/or C++ source and header files, +you can add the names of the files after the \c INPUT tag. +If you have a larger project consisting of a source directory or tree +this may become tiresome. In this case you should put the root directory or +directories after the \c INPUT tag, and add one or more file +patterns to the \c FILE_PATTERN tag. Only files that match one of the +patterns will be parsed (if the patterns are omitted all files will be parsed). +For recursive parsing of a source tree you must set +the \c RECURSIVE tag to \c YES. To further finetune the list of files +that is parsed the \c EXCLUDE and \c EXCLUDE_PATTERNS tags can be used. + +If you start using Doxygen for an existing project (thus without any +documentation that Doxygen is aware of), you can still get an idea of +what the documented result would be. To do so, you must set the \c EXTRACT_ALL +tag in the configuration file to \c YES. Then, Doxygen will pretend +everything in your sources is documented. Please note that warnings of +undocumented members will not be generated as long as \c EXTRACT_ALL is set +to \c YES. + +\subsection step2 Step 2: Running doxygen + +To generate the documentation you can now enter: +\verbatim +doxygen <config-file> +\endverbatim + +Doxygen will create a \c html, \c latex and/or \c man directory inside +the output directory. +As the names suggest the \c html directory contains the +generated documentation in HTML format and the \c latex directory contains the +generated documentation in \f$\mbox{\LaTeX}\f$ format. Man pages are put +in a man3 directory inside the \c man directory. + +The default output directory is the directory in which \c doxygen +is started. The directory to which the output is written can be changed +using the \c OUTPUT_DIRECTORY , \c HTML_OUTPUT, \c LATEX_OUTPUT, and +\c MAN_OUTPUT tags of the configuration file. If the output directory does not +exist, \c doxygen will try to create it for you. + +\addindex browser +The generated HTML documentation can be viewed by pointing a HTML browser +to the \c index.html file in the \c html directory. For the best results +a browser that supports cascading style sheets (CSS) should be used +(I'm currently using Netscape 4.0 to test the generated output). +\addindex LaTeX + +The generated \f$\mbox{\LaTeX}\f$ documentation must first be compiled by +a \f$\mbox{\LaTeX}\f$ compiler. (I use teTeX distribution version 0.4 +that contains \f$\mbox{\TeX}\f$ version 3.14159). To simplify the process +of compiling the generated +documentation, \c doxygen writes a \c Makefile into the \c latex directory. +By typing \c make in the \c latex directory the dvi file \c refman.dvi +will be generated. This file can then be viewed using \c xdvi or +converted into a postscript file \c refman.ps by typing <code>make ps</code> +(this requires \c dvips ). The Postscript file can be send to a postscript +printer. If you do not have a postscript printer, you can try to use +ghostscript to convert postscript into something your printer understands. + +The generated man pages can be viewed using the \c man program. You do need +to make sure the man directory is in the man path (see the MANPATH +environment variable). Notice that there are some limitations to the +capabilities of the man page format, so some information +(like class diagrams, cross references and formulas) will be lost. + +\subsection step3 Step 3: Documenting the sources + +Although documenting the source is presented as step 3, in a new project +this should ofcourse be step 1. Here I assume +you already have some code and you want Doxygen to generate a nice document +describing the API and maybe the internals as well. + +If the \c EXTRACT_ALL option is set to \c NO in the configuration file +(the default), then doxygen will only generate documentation for +\e documented members, files, classes and namespaces. So how do you document +these? For members, classes and namespaces there are basicly two options: +<ol> +<li>Place a \e special documentation block in front of the declaration or + definition of the member, class or namespace. For file, class and namespace + members it is also allowed to place the documention directly after the + member. See section \ref specialblock to learn more about special + documentation blocks. +<li>Place a special documentation block somewhere else (another file or + another location) \e and put a <em>structural command</em> in the + documentation block. A structural command links a documentation block + to a certain object that can be documented (e.g. a member, class, + namespace or file). See section \ref structuralcommands to learn more + about structural commands. +</ol> +Files can only be documented using the second option. +The text inside a special documentation block is parsed +before it is written to the HTML and/or \f$\mbox{\LaTeX}\f$ output files. + +\addindex parsing +During parsing the following steps take place: +<ul> +<li> The special commands inside the documentation are executed. See + section \ref commands for an overview of all commands. +<li> If a line starts with some whitespace followed by one or more asterixes + (<tt>*</tt>) then the whitespace and asterixes are removed. +<li> All resulting blank lines are treated as a paragraph separators. + This saves you from placing new-paragraph commands yourself, + in order to make the generated documentation readable. +<li> Links are created for words corresponding to documented classes. +<li> Links to members are created when certain patterns are found in the + text. See section \ref autolink + for more information on how the automatic link generation works. +<li> HTML tags that are in the documentation are interpreted and converted + to \f$\mbox{\LaTeX}\f$ equivalents for the \f$\mbox{\LaTeX}\f$ output. + See section \ref htmlcmds for an overview of all supported HTML tags. +</ul> + +\subsection specialblock Special documentation blocks + +The following types of special documentation blocks are supported by Doxygen: +<ul> +<li>The Qt style, where special documentation blocks look like: +\verbatim +/*! + ... text ... +*/ +\endverbatim and the one line version: +\verbatim +//! ... one line of text ... +\endverbatim +<li>The JavaDoc style, where special documentation blocks look like: +\verbatim +/** + * ... text ... + */ +\endverbatim and the one line version: +\verbatim +/// ... one line of text ... +\endverbatim +</ul> + +Here is an example of a documented piece of C++ code using the Qt style: +\verbinclude qtstyle.cpp + \htmlonly + Click <a href="$(DOXYGEN_DOCDIR)/examples/qtstyle/html/class_test.html">here</a> + for the corresponding HTML documentation that is generated by Doxygen. + \endhtmlonly + +The one-line comments should contain a brief description, +whereas the multi-line comment blocks contain a more detailed description. +The brief descriptions are included in the member overview of a class, +namespace or file and are printed using a small italic font +(this description can be omitted by setting \c BRIEF_MEMBER_DESC to \c NO in +the config file). By default the brief descriptions are also the first +sentence of the detailed description +(this can be changed by setting the \c REPEAT_BRIEF tag to \c NO). +Both the brief and the detailed descriptions are optional +for the Qt style. + +Here is the same piece of code, this time documented using the JavaDoc +style: +\verbinclude jdstyle.cpp + \htmlonly + Click <a href="$(DOXYGEN_DOCDIR)/examples/jdstyle/html/class_test.html">here</a> + for the corresponding HTML documentation that is generated by Doxygen. + \endhtmlonly + +Notice that the first sentence of the documentation (until the <tt>.</tt>) +is treated as a brief description, whereas the documentation block as a whole +forms the detailed description. The brief description is required for the +JavaDoc style. + +Unlike most other documentation systems, Doxygen also allows you to put +the documentation of members (including global functions) in front of +the \e definition. This way the documentation can be placed in the source +file instead of the header file. This keeps the header file compact, and allows the +implementer of the members more direct access to the documentation. +As a compromise the brief description could be placed before the +declaration and the detailed description before the member definition +(assuming you use the Qt style comments). + +\subsection structuralcommands Structural commands + +So far we have assumed that the documentation blocks are always located in +front of the declaration or definition of a file, class or namespace or in +front of one of its members. +Although this is often comfortable, it may sometimes be better to put the +documentation somewhere else. For some types of documentation blocks (like file +documentation) this is even required. Doxygen allows you to put your +documentation blocks practically anywhere (the exception is inside the body +of a function or inside a normal C style comment block), as long as you put a +structural command inside the documentation block. + +Structural commands (like all other commands) start with a backslash +(<tt>\\</tt>) followed by a command name and one or more parameters. +For instance, if you want to document the class \c Test in the example +above, you could have also put the following documentation block somewhere +in the input that is read by Doxygen: +\verbatim +/*! \class Test + \brief A test class. + + A more detailed class description. +*/ +\endverbatim + +Here the special command \c \class is used to indicated that the +comment block contains documentation for the class \c Test. +Other structural commands are: +<ul> +<li>\c \struct to document a C-struct. +<li>\c \union to document a union. +<li>\c \enum to document an enumeration type. +<li>\c \fn to document a function. +<li>\c \var to document a variable or typedef or enum value. +<li>\c \def to document a \#define. +<li>\c \file to document a file. +<li>\c \namespace to document a namespace. +</ul> +See section \ref commands for detailed information about these and other +commands. Notice that the documentation block belonging to a file +should always contain a structural command. + +To document a member of a C++ class, you must also document the class +itself. The same holds for namespaces. To document a C function, typedef, +enum or preprocessor definition you must first document the file that +contains it (usually this will be a header file, because that file contains +the information that is exported to other source files). + +Here is an example of a C header named \c structcmd.h that is documented +using structural commands: +\verbinclude structcmd.h + \htmlonly + Click <a href="$(DOXYGEN_DOCDIR)/examples/structcmd/html/structcmd.h.html">here</a> + for the corresponding HTML documentation that is generated by Doxygen. + \endhtmlonly + +\par Notice: + Because each comment block in the example above contains a structural command, all + the comment blocks could be moved to another location or input file + (the source file for instance), without affecting the generated + documentation. The disadvantage of this approach is that prototypes are + duplicated, so all changes have to be made twice! + +\subsection memberdoc Documenting compound members. + +If you want to document the members of a file, struct, union, class, or enum +and you want to put the documentation for these members inside the compound, +it is sometimes desired to place the documentation block after the member +instead of before. For this purpose Doxygen has the following +additional comment blocks: +\verbatim +/*!< ... */ +\endverbatim +This block can be used to put a qt style documentation blocks after a member. +The one line version look as follows: +\verbatim +//!< ... +\endverbatim +There are also JavaDoc versions: +\verbatim +/**< ... */ +\endverbatim +and +\verbatim +///< ... +\endverbatim +Notice that these blocks have the same structure and meaning as the +special comment blocks above only the \< indicates that the member is +located in front of the block instead of after the block. + +Here is an example of a the use of these comment blocks: +\verbinclude afterdoc.h + \htmlonly + Click <a href="$(DOXYGEN_DOCDIR)/examples/afterdoc/html/class_test.html">here</a> + for the corresponding HTML documentation that is generated by Doxygen. + \endhtmlonly + +\warning These blocks can only be used to document \e members. + They cannot be used to document file classes, unions, structs and + enums. Furthermore, the structural commands mentioned in the + previous section are ignored inside these comment blocks. + +\subsection formulas Including formulas in the documentation + +Doxygen allows you to put \f$\mbox{\LaTeX}\f$ formulas in the +output (this works only for the HTML and \f$\mbox{\LaTeX}\f$ formats, +not for the man page output). To be able to include formulas (as images) +in the HTML documentation, you will also need to have the following tools +installed +<ul> +<li>\c latex: the \f$\mbox{\LaTeX}\f$ compiler, needed to parse the formulas. + To test I have used the teTeX 0.4 distribution. +<li>\c dvips: a tool to convert dvi files to postscript files + I have used version 5.58f from Radical Eye software for testing. +<li>\c gs: the ghostscript interpreter for converting postscript files + to bitmaps. I have used Aladdin Ghostscript 5.01 for testing. +</ul> + +There are two ways to include formulas in the documentation. +<ol> +<li>Using in-text formulas that appear in the running text. + These formulas should be put between a pair of \\f\$ + commands, so +\verbatim + The distance between \f$(x_1,y_1)\f$ and \f$(x_2,y_2)\f$ is + \f$\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}\f$. +\endverbatim results in: + + The distance between \f$(x_1,y_1)\f$ and \f$(x_2,y_2)\f$ is + \f$\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}\f$. +<br> +<li>Unnumbered displayed formulas that are centered on a separate line. + These formulas should be put between \\f\[ and \\f\] commands. + An example: +\verbatim + \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] +\endverbatim + results in: + \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] +</ol> +Formulas should be valid commands in \f$\mbox{\LaTeX}\f$'s math-mode. + +\warning Currently, Doxygen is not very fault tolerant in recovering +from typos in formulas. It may have to be necessary to remove the +file formula.repository that is written in the html directory to +a rid of an incorrect formula + +\subsection moreinfo More information + +\addindex QdbtTabular +For a more elaborate example see <a href="http://www.stack.nl/~dimitri/qdbttabular/html/index.html"> +the documentation of QdbtTabular</a> \latexonly +({\tt http://www.stack.nl/$\sim$dimitri/qdbttabular/html})\endlatexonly. +\htmlonly +I hope that was clear. If not, please let me know, so I can improve this document. If you have problems +take a look at the <a href="trouble.html">troubleshooting</a> section. +\endhtmlonly + +*/ |