92d78f0e195537ede4fa32d084072c8ff895f02c
[platform/upstream/doxygen.git] / doc / faq.doc
1 /******************************************************************************
2  *
3  * 
4  *
5  * Copyright (C) 1997-2014 by Dimitri van Heesch.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation under the terms of the GNU General Public License is hereby 
9  * granted. No representations are made about the suitability of this software 
10  * for any purpose. It is provided "as is" without express or implied warranty.
11  * See the GNU General Public License for more details.
12  *
13  * Documents produced by Doxygen are derivative works derived from the
14  * input used in their production; they are not affected by this license.
15  *
16  */
17 /*! \page faq Frequently Asked Questions
18
19 <ol>
20 <li><b>How to get information on the index page in HTML?</b>
21 <p>
22 You should use the \ref cmdmainpage "\\mainpage" command inside a comment block like this:
23 \verbatim
24 /*! \mainpage My Personal Index Page
25  *
26  * \section intro_sec Introduction
27  *
28  * This is the introduction.
29  *
30  * \section install_sec Installation
31  *
32  * \subsection step1 Step 1: Opening the box
33  *  
34  * etc...
35  */
36 \endverbatim
37
38 <li><b>Help, some/all of the members of my class / file / namespace 
39        are not documented?</b>
40
41   Check the following:
42   <ol>
43   <li>Is your class / file / namespace documented? If not, it will not 
44       be extracted from the sources unless \ref cfg_extract_all "EXTRACT_ALL" is set to \c YES
45       in the config file.
46   <li>Are the members private? If so, you must set \ref cfg_extract_private "EXTRACT_PRIVATE" to \c YES
47       to make them appear in the documentation.
48   <li>Is there a function macro in your class that does not end with a 
49       semicolon (e.g. MY_MACRO())? If so then you have to instruct 
50       doxygen's preprocessor to remove it.
51
52       This typically boils down to the following settings in the config file:
53
54       \verbatim
55 ENABLE_PREPROCESSING   = YES
56 MACRO_EXPANSION        = YES
57 EXPAND_ONLY_PREDEF     = YES
58 PREDEFINED             = MY_MACRO()=
59       \endverbatim
60
61       Please read the \ref preprocessing "preprocessing" section of the
62       manual for more information.
63   </ol> 
64
65 <li><b>When I set EXTRACT_ALL to NO none of my functions are shown in the 
66     documentation.</b>
67
68 In order for global functions, variables, enums, typedefs, and defines 
69 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 command. 
72
73 Alternatively, you can put all members in a group (or module)
74 using the \ref cmdingroup "\\ingroup" command and then document the group using a comment
75 block containing the \ref cmddefgroup "\\defgroup" command.
76
77 For member functions or functions that are part of a namespace you should
78 document either the class or namespace.
79  
80 <li><b>How can I make doxygen ignore some code fragment?</b>
81
82 The new and easiest way is to add one comment block 
83 with a \ref cmdcond "\\cond" command at the start and one comment block 
84 with a \ref cmdendcond "\\endcond" command at the end of the piece of
85 code that should be ignored. This should be within the same file of course.
86
87 But you can also use Doxygen's preprocessor for this: 
88 If you put
89 \verbatim
90 #ifndef DOXYGEN_SHOULD_SKIP_THIS
91
92  /* code that must be skipped by Doxygen */
93
94 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
95 \endverbatim
96 around the blocks that should be hidden and put:
97 \verbatim
98   PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
99 \endverbatim
100 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
103 <li><b>How can I change what is after the <code>\#include</code> 
104 in the class documentation?</b>
105
106 In most cases you can use \ref cfg_strip_from_inc_path "STRIP_FROM_INC_PATH" 
107 to strip a user defined part of a path.
108
109 You can also document your class as follows
110
111 \verbatim
112 /*! \class MyClassName include.h path/include.h
113  *
114  *  Docs for MyClassName
115  */
116 \endverbatim
117
118 To make doxygen put <br><br>
119 <code>
120 \#include \<path/include.h\>
121 </code>
122
123 in the documentation of the class MyClassName regardless of the name of the actual 
124 header file in which the definition of MyClassName is contained.
125
126 If you want doxygen to show that the include file should be included using
127 quotes instead of angle brackets you should type:
128 \verbatim
129 /*! \class MyClassName myhdr.h "path/myhdr.h"
130  *
131  *  Docs for MyClassName
132  */
133 \endverbatim
134
135 <li><b>How can I use tag files in combination with compressed HTML?</b>
136
137 If you want to refer from one compressed HTML file 
138 \c a.chm to another compressed HTML file 
139 called \c b.chm, the
140 link in \c a.chm must have the following format:
141 \verbatim
142 <a href="b.chm::/file.html">
143 \endverbatim
144 Unfortunately this only works if both compressed HTML files are in the same 
145 directory.
146
147 As a result you must rename the generated \c index.chm files for all projects
148 into something unique and put all <code>.chm</code> files in one directory.
149
150 Suppose you have a project \e a referring to a project \e b using tag file
151 \c b.tag, then you could rename the \c index.chm for project \e a into
152 \c a.chm and the \c index.chm for project \e b into \c b.chm. In the 
153 configuration file for project \e a you write:
154 \verbatim
155 TAGFILES = b.tag=b.chm::
156 \endverbatim
157
158 <li><b>I don't like the quick index that is put above each HTML page, what do I do?</b>
159
160 You can disable the index by setting \ref cfg_disable_index "DISABLE_INDEX" to `YES`. Then you can
161 put in your own header file by writing your own header and feed that to
162 \ref cfg_html_header "HTML_HEADER".
163
164 <li><b>The overall HTML output looks different, while I only wanted to 
165        use my own html header file</b>
166
167 You probably forgot to include the stylesheet <code>doxygen.css</code> that 
168 doxygen generates. You can include this by putting
169 \verbatim
170 <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
171 \endverbatim
172 in the HEAD section of the HTML page.
173
174 <li><b>Why does doxygen use Qt?</b>
175
176 The most important reason is to have a platform abstraction for most 
177 Unices and Windows by means of the QFile, QFileInfo, QDir, QDate, 
178 QTime and QIODevice classes. 
179 Another reason is for the nice and bug free utility classes, like QList, 
180 QDict, QString, QArray, QTextStream, QRegExp, QXML etc. 
181
182 The GUI front-end doxywizard uses Qt for... well... the GUI!
183
184 <li><b>How can I exclude all test directories from my directory tree?</b>
185
186 Simply put an exclude pattern like this in the configuration file:
187
188 \verbatim
189 EXCLUDE_PATTERNS = */test/*
190 \endverbatim
191
192 <li><b>Doxygen automatically generates a link to the 
193        class MyClass somewhere in the running text. 
194        How do I prevent that at a certain place?</b>
195
196 Put a \% in front of the class name. Like this: \%MyClass. Doxygen will then
197 remove the % and keep the word unlinked.
198
199 <li><b>My favorite programming language is X. Can I still use doxygen?</b>
200
201 No, not as such; doxygen needs to understand the structure of what it reads. 
202 If you don't mind spending some time on it, there are several options:
203 - If the grammar of X is close to C or C++, then it is probably not too hard to
204   tweak src/scanner.l a bit so the language is supported. This is done
205   for all other languages directly supported by doxygen 
206   (i.e. Java, IDL, C#, PHP).
207 - If the grammar of X is somewhat different than you can write an input
208   filter that translates X into something similar enough to C/C++ for
209   doxygen to understand (this approach is taken for VB, Object Pascal, and
210   Javascript, see http://www.stack.nl/~dimitri/doxygen/download.html#helpers).
211 - If the grammar is completely different one could write a parser for X and 
212   write a backend that produces a similar syntax tree as is done by 
213   src/scanner.l (and also by src/tagreader.cpp while reading tag files).
214
215 <li><b>Help! I get the cryptic message 
216  "input buffer overflow, can't enlarge buffer because scanner uses REJECT"</b>
217
218 This error happens when doxygen's lexical scanner has a rule that matches
219 more than 256K of input characters in one go. I've seen this happening 
220 on a very large generated file (\>256K lines), where the built-in preprocessor 
221 converted it into an empty file (with \>256K of newlines). Another case
222 where this might happen is if you have lines in your code with more than
223 256K characters. 
224
225 If you have run into such a case and want me to fix it, you
226 should send me a code fragment that triggers the message. To work around
227 the problem, put some line-breaks into your file, split it up into smaller 
228 parts, or exclude it from the input using EXCLUDE.
229
230 <li><b>When running make in the latex dir I get "TeX capacity exceeded". Now what?</b>
231
232 You can edit the texmf.cfg file to increase the default values of the 
233 various buffers and then run "texconfig init".
234
235 <li><b>Why are dependencies via STL classes not shown in the dot graphs?</b>
236
237 Doxygen is unaware of the STL classes, unless the 
238 option \ref cfg_builtin_stl_support "BUILTIN_STL_SUPPORT" is turned on.
239
240 <li><b>I have problems getting the search engine to work with PHP5 and/or windows</b>
241
242 Please read <a href="searchengine.html">this</a> for hints on where to look. 
243
244 <li><b>Can I configure doxygen from the command line?</b>
245
246 Not via command line options, but doxygen can read from <code>stdin</code>,
247 so you can pipe things through it. Here's an example how to override an option
248 in a configuration file from the command line (assuming a UNIX like environment):
249
250 \verbatim
251 ( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen -
252 \endverbatim
253
254 For Windows the following would do the same:
255
256 \verbatim
257 ( type Doxyfile & echo PROJECT_NUMBER=1.0 ) | doxygen.exe -
258 \endverbatim
259
260 If multiple options with the same name are specified then doxygen will use 
261 the last one. To append to an existing option you can use the += operator.
262
263 <li><b>How did doxygen get its name?</b>
264
265 Doxygen got its name from playing with the words 
266 documentation and generator.
267
268 \verbatim
269 documentation -> docs -> dox
270 generator -> gen
271 \endverbatim
272
273 At the time I was looking into \c lex and \c yacc, where a lot of things start with
274 "yy", so the "y" slipped in and made things pronounceable 
275 (the proper pronouncement is Docs-ee-gen, so with a long "e").
276
277 <li><b>What was the reason to develop doxygen?</b>
278
279 I once wrote a GUI widget based on the Qt library (it is still available at
280 http://sourceforge.net/projects/qdbttabular/ but hasn't been updated since 2002). 
281 Qt had nicely generated documentation (using an internal tool which 
282 <a href="http://rant.gulbrandsen.priv.no/udoc/history">they didn't want to release</a>) 
283 and I wrote similar docs by hand. 
284 This was a nightmare to maintain, so I wanted a similar tool. I looked at
285 Doc++ but that just wasn't good enough (it didn't support signals and
286 slots and did not have the Qt look and feel I had grown to like), 
287 so I started to write my own tool...
288
289 </ol>
290
291 \htmlonly
292 Go to the <a href="trouble.html">next</a> section or return to the
293  <a href="index.html">index</a>.
294 \endhtmlonly
295
296 */
297