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