====== Doxygen made easy ====== The idea behind this document is to teach how to document your source code with doxygen without detailing all the features Doxygen has: I will concentrate only in the most convenient documentation examples to get your code well documented and in a consistent way. The problem with doxygen is that it has may types of [[https://www.stack.nl/~dimitri/doxygen/manual/docblocks.html#specialblock|special comments blocks]], so its very easy to get lost in the details. To overcome this, I will pick for this paper the one I find more convenient and I will give some examples of these blocks with the result you will get. These examples are made with doxygen version 1.8.11 for Linux. The project I am documenting is an example project with three classes. The project is written in C++ and has a makefile to compile: my idea is to create a rule in makefile so that ''make doc'' will update the documentation. My objective is to generate the documentation in HTML. However, many kinds of output are available: chm, latex, eclipse help, math help, qt help. ===== Installation ===== # sudo apt-get install doxygen # sudo apt-get install graphviz ===== First round: empty document ===== I've created a simple config file called ''Doxyfile'': # # Doxyfile - configuration for doxygen # PROJECT_NAME = "Example for doxygen" PROJECT_NUMBER = "23.0.1.plus" PROJECT_BRIEF = "this is called PROJECT_BRIEF tag" PROJECT_LOGO = "logo.png" # Errors, warnings QUIET = no WARNINGS = yes WARN_IF_UNDOCUMENTED = yes # navigation and behaviour OUTPUT_DIRECTORY = "doc" INPUT= . FILE_PATTERNS = *.cpp *.h RECURSIVE = yes EXCLUDE = "doc/" # output GENERATE_HTML = yes GENERATE_LATEX = no HTML_OUTPUT = html OUTPUT_LANGUAGE = English ## Spanish BRIEF_MEMBER_DESC = yes FULL_PATH_NAMES = no INHERIT_DOCS = yes TAB_SIZE = 4 MARKDOWN_SUPPORT = yes AUTOLINK_SUPPORT = yes GENERATE_BUGLIST = yes GENERATE_DEPRECATEDLIST = yes And I've generated my first documentation with the project almost empty: $ doxygen And let's check out the result. These lines: PROJECT_NAME = "Example for doxygen" PROJECT_NUMBER = "23.0.1.plus" PROJECT_BRIEF = "this is called PROJECT_BRIEF tag" PROJECT_LOGO = "logo.png" are converted into this: {{ :cpp:01.png?600 |}} ===== Second round: Generating documentation ===== For generating documentation, I've created three classes into my pet project: {{ :cpp:02.png?600 |}} What are the results. This comments: /** * Brief explanation of the class Square. * * A more long, detailed explanation of the Square * class, that represents the squares in the classs. * */ class Square: public Figure { public: Square(); ~Square(); }; Generate this in the docummentation: {{:cpp:04.png|}} And this: /** * * This is the explanation of the square constructor. * */ Square::Square() { // TODO Auto-generated constructor stub } Generates this: {{:cpp:05.png|}} The comments on public properties: class Square: public Figure { double side; /*!< comment on a private value */ public: double something; /*!< comment on a public property */ Yields this: {{:cpp:06.png|}}