faq.doc 10.8 KB
Newer Older
1 2
/******************************************************************************
 *
3
 * 
4
 *
Dimitri van Heesch's avatar
Dimitri van Heesch committed
5
 * Copyright (C) 1997-2014 by Dimitri van Heesch.
6 7 8 9 10 11 12
 *
 * 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.
 *
Dimitri van Heesch's avatar
Dimitri van Heesch committed
13 14
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
15 16 17 18
 *
 */
/*! \page faq Frequently Asked Questions

albert-github's avatar
albert-github committed
19 20 21 22
\tableofcontents


\section faq_index How to get information on the index page in HTML?
23
<p>
24
You should use the \ref cmdmainpage "\\mainpage" command inside a comment block like this:
25
\verbatim
26
/*! \mainpage My Personal Index Page
27
 *
28
 * \section intro_sec Introduction
29 30 31
 *
 * This is the introduction.
 *
32
 * \section install_sec Installation
33 34 35 36
 *
 * \subsection step1 Step 1: Opening the box
 *  
 * etc...
37 38 39
 */
\endverbatim

albert-github's avatar
albert-github committed
40
\section fac_al Help, some/all of the members of my class / file / namespace are not documented?
41 42 43 44

  Check the following:
  <ol>
  <li>Is your class / file / namespace documented? If not, it will not 
45
      be extracted from the sources unless \ref cfg_extract_all "EXTRACT_ALL" is set to \c YES
46
      in the config file.
47
  <li>Are the members private? If so, you must set \ref cfg_extract_private "EXTRACT_PRIVATE" to \c YES
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
      to make them appear in the documentation.
  <li>Is there a function macro in your class that does not end with a 
      semicolon (e.g. MY_MACRO())? If so then you have to instruct 
      doxygen's preprocessor to remove it.

      This typically boils down to the following settings in the config file:

      \verbatim
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES
PREDEFINED             = MY_MACRO()=
      \endverbatim

      Please read the \ref preprocessing "preprocessing" section of the
      manual for more information.
  </ol> 

albert-github's avatar
albert-github committed
66
\section faq_extract_allWhen I set EXTRACT_ALL to NO none of my functions are shown in the documentation.
67 68 69

In order for global functions, variables, enums, typedefs, and defines 
to be documented you should document the file in which these commands are
70
located using a comment block containing a \ref cmdfile "\\file" (or \ref cmdfile "\@file") 
71 72 73
command. 

Alternatively, you can put all members in a group (or module)
74 75
using the \ref cmdingroup "\\ingroup" command and then document the group using a comment
block containing the \ref cmddefgroup "\\defgroup" command.
76 77 78

For member functions or functions that are part of a namespace you should
document either the class or namespace.
79
 
albert-github's avatar
albert-github committed
80
\section faq_code How can I make doxygen ignore some code fragment?
81 82

The new and easiest way is to add one comment block 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
83
with a \ref cmdcond "\\cond" command at the start and one comment block 
84 85 86 87
with a \ref cmdendcond "\\endcond" command at the end of the piece of
code that should be ignored. This should be within the same file of course.

But you can also use Doxygen's preprocessor for this: 
88 89 90 91 92 93 94 95 96 97 98 99 100
If you put
\verbatim
#ifndef DOXYGEN_SHOULD_SKIP_THIS

 /* code that must be skipped by Doxygen */

#endif /* DOXYGEN_SHOULD_SKIP_THIS */
\endverbatim
around the blocks that should be hidden and put:
\verbatim
  PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
\endverbatim
in the config file then all blocks should be skipped by Doxygen as long
101
as \ref cfg_enable_preprocessing "ENABLE_PREPROCESSING" is set to `YES`.
102

albert-github's avatar
albert-github committed
103
\section faq_code_inc How can I change what is after the <code>\#include</code> in the class documentation?
104

105 106
In most cases you can use \ref cfg_strip_from_inc_path "STRIP_FROM_INC_PATH" 
to strip a user defined part of a path.
107 108

You can also document your class as follows
109 110 111 112 113 114 115 116 117 118

\verbatim
/*! \class MyClassName include.h path/include.h
 *
 *  Docs for MyClassName
 */
\endverbatim

To make doxygen put <br><br>
<code>
119
\#include \<path/include.h\>
120 121 122 123 124
</code>

in the documentation of the class MyClassName regardless of the name of the actual 
header file in which the definition of MyClassName is contained.

Dimitri van Heesch's avatar
Dimitri van Heesch committed
125
If you want doxygen to show that the include file should be included using
126
quotes instead of angle brackets you should type:
Dimitri van Heesch's avatar
Dimitri van Heesch committed
127
\verbatim
128
/*! \class MyClassName myhdr.h "path/myhdr.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
129 130 131 132 133
 *
 *  Docs for MyClassName
 */
\endverbatim

albert-github's avatar
albert-github committed
134
\section faq_chm How can I use tag files in combination with compressed HTML?
135 136 137 138 139 140 141 142 143 144 145 146

If you want to refer from one compressed HTML file 
\c a.chm to another compressed HTML file 
called \c b.chm, the
link in \c a.chm must have the following format:
\verbatim
<a href="b.chm::/file.html">
\endverbatim
Unfortunately this only works if both compressed HTML files are in the same 
directory.

As a result you must rename the generated \c index.chm files for all projects
147
into something unique and put all <code>.chm</code> files in one directory.
148 149 150 151 152 153 154 155 156

Suppose you have a project \e a referring to a project \e b using tag file
\c b.tag, then you could rename the \c index.chm for project \e a into
\c a.chm and the \c index.chm for project \e b into \c b.chm. In the 
configuration file for project \e a you write:
\verbatim
TAGFILES = b.tag=b.chm::
\endverbatim

albert-github's avatar
albert-github committed
157
\section faq_html I don't like the quick index that is put above each HTML page, what do I do?
Dimitri van Heesch's avatar
Dimitri van Heesch committed
158

159
You can disable the index by setting \ref cfg_disable_index "DISABLE_INDEX" to `YES`. Then you can
Dimitri van Heesch's avatar
Dimitri van Heesch committed
160
put in your own header file by writing your own header and feed that to
161
\ref cfg_html_header "HTML_HEADER".
Dimitri van Heesch's avatar
Dimitri van Heesch committed
162

albert-github's avatar
albert-github committed
163
\section faq_html_header The overall HTML output looks different, while I only wanted to use my own html header file
Dimitri van Heesch's avatar
Dimitri van Heesch committed
164 165 166 167 168 169

You probably forgot to include the stylesheet <code>doxygen.css</code> that 
doxygen generates. You can include this by putting
\verbatim
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
\endverbatim
Dimitri van Heesch's avatar
Dimitri van Heesch committed
170
in the HEAD section of the HTML page.
Dimitri van Heesch's avatar
Dimitri van Heesch committed
171

albert-github's avatar
albert-github committed
172
\section faq_use_qt Why does doxygen use Qt?
173

174
The most important reason is to have a platform abstraction for most 
175 176 177
Unices and Windows by means of the QFile, QFileInfo, QDir, QDate, 
QTime and QIODevice classes. 
Another reason is for the nice and bug free utility classes, like QList, 
178
QDict, QString, QArray, QTextStream, QRegExp, QXML etc. 
179

180 181
The GUI front-end doxywizard uses Qt for... well... the GUI!

albert-github's avatar
albert-github committed
182
\section faq_excl_dir How can I exclude all test directories from my directory tree?
183 184 185 186 187 188 189

Simply put an exclude pattern like this in the configuration file:

\verbatim
EXCLUDE_PATTERNS = */test/*
\endverbatim

albert-github's avatar
albert-github committed
190
\section faq_class Doxygen automatically generates a link to the class MyClass somewhere in the running text.  How do I prevent that at a certain place?
191 192 193 194

Put a \% in front of the class name. Like this: \%MyClass. Doxygen will then
remove the % and keep the word unlinked.

albert-github's avatar
albert-github committed
195
\section faq_pgm_X My favorite programming language is X. Can I still use doxygen?
196 197 198

No, not as such; doxygen needs to understand the structure of what it reads. 
If you don't mind spending some time on it, there are several options:
Dimitri van Heesch's avatar
Dimitri van Heesch committed
199
- If the grammar of X is close to C or C++, then it is probably not too hard to
200 201 202
  tweak src/scanner.l a bit so the language is supported. This is done
  for all other languages directly supported by doxygen 
  (i.e. Java, IDL, C#, PHP).
Dimitri van Heesch's avatar
Dimitri van Heesch committed
203
- If the grammar of X is somewhat different than you can write an input
204 205 206
  filter that translates X into something similar enough to C/C++ for
  doxygen to understand (this approach is taken for VB, Object Pascal, and
  Javascript, see http://www.stack.nl/~dimitri/doxygen/download.html#helpers).
Dimitri van Heesch's avatar
Dimitri van Heesch committed
207
- If the grammar is completely different one could write a parser for X and 
208 209 210
  write a backend that produces a similar syntax tree as is done by 
  src/scanner.l (and also by src/tagreader.cpp while reading tag files).

albert-github's avatar
albert-github committed
211
\section faq_lex Help! I get the cryptic message "input buffer overflow, can't enlarge buffer because scanner uses REJECT"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
212

213
This error happens when doxygen's lexical scanner has a rule that matches
Dimitri van Heesch's avatar
Dimitri van Heesch committed
214 215 216
more than 256K of input characters in one go. I've seen this happening 
on a very large generated file (\>256K lines), where the built-in preprocessor 
converted it into an empty file (with \>256K of newlines). Another case
Dimitri van Heesch's avatar
Dimitri van Heesch committed
217
where this might happen is if you have lines in your code with more than
Dimitri van Heesch's avatar
Dimitri van Heesch committed
218
256K characters. 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
219

220
If you have run into such a case and want me to fix it, you
Dimitri van Heesch's avatar
Dimitri van Heesch committed
221 222
should send me a code fragment that triggers the message. To work around
the problem, put some line-breaks into your file, split it up into smaller 
223
parts, or exclude it from the input using EXCLUDE.
Dimitri van Heesch's avatar
Dimitri van Heesch committed
224

albert-github's avatar
albert-github committed
225
\section faq_latex When running make in the latex dir I get "TeX capacity exceeded". Now what?
226 227 228 229

You can edit the texmf.cfg file to increase the default values of the 
various buffers and then run "texconfig init".

albert-github's avatar
albert-github committed
230
\section faq_stl Why are dependencies via STL classes not shown in the dot graphs?
231

232 233
Doxygen is unaware of the STL classes, unless the 
option \ref cfg_builtin_stl_support "BUILTIN_STL_SUPPORT" is turned on.
234

albert-github's avatar
albert-github committed
235
\section faq_search I have problems getting the search engine to work with PHP5 and/or windows
236 237

Please read <a href="searchengine.html">this</a> for hints on where to look. 
238

albert-github's avatar
albert-github committed
239
\section faq_cmdline Can I configure doxygen from the command line?
Dimitri van Heesch's avatar
Dimitri van Heesch committed
240 241 242

Not via command line options, but doxygen can read from <code>stdin</code>,
so you can pipe things through it. Here's an example how to override an option
243
in a configuration file from the command line (assuming a UNIX like environment):
Dimitri van Heesch's avatar
Dimitri van Heesch committed
244 245 246 247 248

\verbatim
( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen -
\endverbatim

249 250 251 252 253 254
For Windows the following would do the same:

\verbatim
( type Doxyfile & echo PROJECT_NUMBER=1.0 ) | doxygen.exe -
\endverbatim

Dimitri van Heesch's avatar
Dimitri van Heesch committed
255 256 257
If multiple options with the same name are specified then doxygen will use 
the last one. To append to an existing option you can use the += operator.

albert-github's avatar
albert-github committed
258
\section faq_name How did doxygen get its name?
259 260 261 262 263 264 265 266 267

Doxygen got its name from playing with the words 
documentation and generator.

\verbatim
documentation -> docs -> dox
generator -> gen
\endverbatim

Dimitri van Heesch's avatar
Dimitri van Heesch committed
268
At the time I was looking into \c lex and \c yacc, where a lot of things start with
269 270
"yy", so the "y" slipped in and made things pronounceable 
(the proper pronouncement is Docs-ee-gen, so with a long "e").
271

albert-github's avatar
albert-github committed
272
\section faq_why What was the reason to develop doxygen?
Dimitri van Heesch's avatar
Dimitri van Heesch committed
273 274

I once wrote a GUI widget based on the Qt library (it is still available at
275
http://sourceforge.net/projects/qdbttabular/ but hasn't been updated since 2002). 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
276
Qt had nicely generated documentation (using an internal tool which 
277 278
<a href="http://rant.gulbrandsen.priv.no/udoc/history">they didn't want to release</a>) 
and I wrote similar docs by hand. 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
279 280
This was a nightmare to maintain, so I wanted a similar tool. I looked at
Doc++ but that just wasn't good enough (it didn't support signals and
281
slots and did not have the Qt look and feel I had grown to like), 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
282 283
so I started to write my own tool...

Dimitri van Heesch's avatar
Dimitri van Heesch committed
284 285 286 287 288
\htmlonly
Go to the <a href="trouble.html">next</a> section or return to the
 <a href="index.html">index</a>.
\endhtmlonly

289 290
*/