Doxygen Intergration in Visual Studio Environment

Posted: August 21, 2009 in Programming Tips
Tags: , , , ,

Doxygen is a documentation system for C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#, and to some extent D.

It can help you in three ways:

  1. It can generate an on-line documentation browser (in HTML) and/or an off-line reference manual (in) from a set of documented source files. There is also support for generating output in RTF (MS-Word), PostScript, hyperlinked PDF, compressed HTML, and UNIX man pages. The documentation is extracted directly from the sources, which makes it much easier to keep the documentation consistent with the source code.
  2. You can configure doxygen to extract the code structure from undocumented source files. This is very useful to quickly find your way in large source distributions. You can also visualize the relations between the various elements by means of include dependency graphs, inheritance diagrams, and collaboration diagrams, which are all generated automatically.

Integration with Visual Studo 6 Environment

doxygen binaries Download the Win32 binaries and install them I’ll assume in the following you installed doxygen in c:\program files\doxygen.
default.doxygen Create a doxygen configuration file and save it as default.doxygen
Add VC++ Tool:
“DoxyGen”
Add a new custom tool, called “DoxyGen”, with the following parameters:

  • Command: c:\program files\doxygen\bin\doxygen.exe (or where you installed it)
  • Arguments: “$(WkspDir)\default.doxygen” (the config file – include the quotes!)
  • Initial Directory: “$(WkspDir)”
  • Check the “Use output directory” box
Add VC++ Tool:
“view results”
add another tool, to view the results new “View DoxyDoc” tool, to view the results:

  • Command your favorite browser, e.g. c:\program files\internet explorer\iexplore.exe
  • Arguments: “$(WkspDir)\doxydoc\index.html”
  • Initial Directory: leave empty
Add to project
  • Open the project you want to add the file to
  • Copy the default.doxygen file into your project folder (this file contains doxygen configuration options)
  • Open it for editing in VC++
  • Change the ***PROJECT NAME*** to the name of your project
  • Right click the file, and choose “Insert File into Project / <project name>”. If you use VSS, I’d also add it to SourceSafe
You’re done! Try! Choose Tools/doxygen from the menu, and watch the magic happen (doxygen will log it’s progress and complaints to the output window).
Choose Tools/View results to explore the documentation.

The “Main Page” is probably rather boring. Click on “Data Structures” in the top line to browse your classes etc.

Integration with Visual Studio 2005 and Visual Studio 2008

doxygen binaries Download the Win32 binaries and install them I’ll assume in the following you installed doxygen in c:\program files\doxygen.
default.doxygen Create a doxygen configuration file and save it as default.doxygen
Add VC++ Tool:
“DoxyGen”
Add a new custom tool, called “DoxyGen”, with the following parameters:

  • Command: c:\program files\doxygen\bin\doxygen.exe (or where you installed it)
  • Arguments: “$(itemdir)\default.doxygen” (the config file – include the quotes!)
  • Initial Directory: “$(itemdir)”
  • Check the “Use output directory” box
Add VC++ Tool:
“view results”
add another tool, to view the results new “View DoxyDoc” tool, to view the results:

  • Command your favorite browser, e.g. c:\program files\internet explorer\iexplore.exe
  • Arguments: “”$(itemdir)”\doxydoc\index.html”
  • Initial Directory: leave empty
Add to project
  • Open the project you want to add the file to
  • Copy the default.doxygen file into your project folder (this file contains doxygen configuration options)
  • Open it for editing in VC++
  • Change the ***PROJECT NAME*** to the name of your project
  • Right click the file, and choose “Insert File into Project / <project name>”. If you use VSS, I’d also add it to SourceSafe
You’re done! Try! Choose Tools/doxygen from the menu, and watch the magic happen (doxygen will log its progress and complaints to the output window).
Choose Tools/View results to explore the documentation.

The “Main Page” is probably rather boring. Click on “Data Structures” in the top line to browse your classes etc.

default.doxygen configuration file

Copy the below text to a notepad and save as default.doxygen.

# Doxyfile 1.5.7

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "Test Project"
PROJECT_NUMBER         = 1.0
OUTPUT_DIRECTORY       = 
CREATE_SUBDIRS         = NO
OUTPUT_LANGUAGE        = English
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       = "The $name class" \
 "The $name widget" \
 "The $name file" \
 is \
 provides \
 specifies \
 contains \
 represents \
 a \
 an \
 the
ALWAYS_DETAILED_SEC    = NO
INLINE_INHERITED_MEMB  = NO
FULL_PATH_NAMES        = YES
STRIP_FROM_PATH        = 
STRIP_FROM_INC_PATH    = 
SHORT_NAMES            = NO
JAVADOC_AUTOBRIEF      = NO
QT_AUTOBRIEF           = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS           = YES
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 8
ALIASES                = 
OPTIMIZE_OUTPUT_FOR_C  = NO
OPTIMIZE_OUTPUT_JAVA   = NO
OPTIMIZE_FOR_FORTRAN   = NO
OPTIMIZE_OUTPUT_VHDL   = NO
BUILTIN_STL_SUPPORT    = NO
CPP_CLI_SUPPORT        = YES
SIP_SUPPORT            = NO
IDL_PROPERTY_SUPPORT   = YES
DISTRIBUTE_GROUP_DOC   = NO
SUBGROUPING            = YES
TYPEDEF_HIDES_STRUCT   = NO
SYMBOL_CACHE_SIZE      = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = YES
EXTRACT_LOCAL_METHODS  = YES
EXTRACT_ANON_NSPACES   = YES
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
HIDE_IN_BODY_DOCS      = NO
INTERNAL_DOCS          = NO
CASE_SENSE_NAMES       = YES
HIDE_SCOPE_NAMES       = NO
SHOW_INCLUDE_FILES     = YES
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
SORT_BRIEF_DOCS        = NO
SORT_GROUP_NAMES       = NO
SORT_BY_SCOPE_NAME     = NO
GENERATE_TODOLIST      = YES
GENERATE_TESTLIST      = YES
GENERATE_BUGLIST       = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS       = 
MAX_INITIALIZER_LINES  = 30
SHOW_USED_FILES        = YES
SHOW_DIRECTORIES       = NO
SHOW_FILES             = YES
SHOW_NAMESPACES        = YES
FILE_VERSION_FILTER    = 
LAYOUT_FILE            = 
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_FORMAT            = "$file:$line: $text"
WARN_LOGFILE           = 
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT                  = .
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          = *.c \
 *.cc \
 *.cxx \
 *.cpp \
 *.c++ \
 *.d \
 *.java \
 *.ii \
 *.ixx \
 *.ipp \
 *.i++ \
 *.inl \
 *.h \
 *.hh \
 *.hxx \
 *.hpp \
 *.h++ \
 *.idl \
 *.odl \
 *.cs \
 *.php \
 *.php3 \
 *.inc \
 *.m \
 *.mm \
 *.dox \
 *.py \
 *.f90 \
 *.f \
 *.vhd \
 *.vhdl
RECURSIVE              = YES
EXCLUDE                = 
EXCLUDE_SYMLINKS       = NO
EXCLUDE_PATTERNS       = 
EXCLUDE_SYMBOLS        = 
EXAMPLE_PATH           = 
EXAMPLE_PATTERNS       = *
EXAMPLE_RECURSIVE      = NO
IMAGE_PATH             = 
INPUT_FILTER           = 
FILTER_PATTERNS        = 
FILTER_SOURCE_FILES    = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER         = YES
INLINE_SOURCES         = YES
STRIP_CODE_COMMENTS    = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION    = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS              = NO
VERBATIM_HEADERS       = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
COLS_IN_ALPHA_INDEX    = 5
IGNORE_PREFIX          = 
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML          = YES
HTML_OUTPUT            = html
HTML_FILE_EXTENSION    = .html
HTML_HEADER            = 
HTML_FOOTER            = 
HTML_STYLESHEET        = 
HTML_ALIGN_MEMBERS     = YES
HTML_DYNAMIC_SECTIONS  = NO
GENERATE_DOCSET        = NO
DOCSET_FEEDNAME        = "Doxygen generated docs"
DOCSET_BUNDLE_ID       = org.doxygen.Project
GENERATE_HTMLHELP      = NO
CHM_FILE               = 
HHC_LOCATION           = 
GENERATE_CHI           = NO
CHM_INDEX_ENCODING     = 
BINARY_TOC             = NO
TOC_EXPAND             = NO
GENERATE_QHP           = NO
QCH_FILE               = 
QHP_NAMESPACE          = org.doxygen.Project
QHP_VIRTUAL_FOLDER     = doc
QHG_LOCATION           = 
DISABLE_INDEX          = NO
ENUM_VALUES_PER_LINE   = 4
GENERATE_TREEVIEW      = ALL
TREEVIEW_WIDTH         = 250
FORMULA_FONTSIZE       = 10
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX         = NO
LATEX_OUTPUT           = latex
LATEX_CMD_NAME         = latex
MAKEINDEX_CMD_NAME     = makeindex
COMPACT_LATEX          = NO
PAPER_TYPE             = a4wide
EXTRA_PACKAGES         = 
LATEX_HEADER           = 
PDF_HYPERLINKS         = YES
USE_PDFLATEX           = YES
LATEX_BATCHMODE        = NO
LATEX_HIDE_INDICES     = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF           = YES
RTF_OUTPUT             = rtf
COMPACT_RTF            = NO
RTF_HYPERLINKS         = NO
RTF_STYLESHEET_FILE    = 
RTF_EXTENSIONS_FILE    = 
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN           = NO
MAN_OUTPUT             = man
MAN_EXTENSION          = .3
MAN_LINKS              = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML           = NO
XML_OUTPUT             = xml
XML_SCHEMA             = 
XML_DTD                = 
XML_PROGRAMLISTING     = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF   = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD       = NO
PERLMOD_LATEX          = NO
PERLMOD_PRETTY         = YES
PERLMOD_MAKEVAR_PREFIX = 
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor   
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = NO
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           = 
INCLUDE_FILE_PATTERNS  = 
PREDEFINED             = 
EXPAND_AS_DEFINED      = 
SKIP_FUNCTION_MACROS   = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references   
#---------------------------------------------------------------------------
TAGFILES               = 
GENERATE_TAGFILE       = 
ALLEXTERNALS           = NO
EXTERNAL_GROUPS        = YES
PERL_PATH              = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool   
#---------------------------------------------------------------------------
CLASS_DIAGRAMS         = YES
MSCGEN_PATH            = 
HIDE_UNDOC_RELATIONS   = YES
HAVE_DOT               = YES
DOT_FONTNAME           = FreeSans
DOT_FONTPATH           = 
CLASS_GRAPH            = YES
COLLABORATION_GRAPH    = YES
GROUP_GRAPHS           = YES
UML_LOOK               = YES
TEMPLATE_RELATIONS     = YES
INCLUDE_GRAPH          = YES
INCLUDED_BY_GRAPH      = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
GRAPHICAL_HIERARCHY    = YES
DIRECTORY_GRAPH        = YES
DOT_IMAGE_FORMAT       = png
DOT_PATH               = 
DOTFILE_DIRS           = 
DOT_GRAPH_MAX_NODES    = 50
MAX_DOT_GRAPH_DEPTH    = 1000
DOT_TRANSPARENT        = YES
DOT_MULTI_TARGETS      = YES
GENERATE_LEGEND        = YES
DOT_CLEANUP            = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine   
#---------------------------------------------------------------------------
SEARCHENGINE           = NO
Advertisements
Comments
  1. Anu Pakanati says:

    Thank you so much– very helpful!

  2. gomons says:

    Very useful. I looked for doxigen plagin, but it solution I like more!

  3. […] This article was inspired by this blog (link). […]

  4. Amirsaman says:

    Thank you for your helpful post, Maybe new solutions are out there for this, but one could instead of calling the tool each time from tools menu, add it to post build commands:

    Right click on Project > Properties > Build Events > Post-Build Commands

    under Command Line add the following

    “c:\program files\doxygen\bin\doxygen.exe” “$(ProjectDir)\default.doxygen”

    (you might need a different folder macro, you can look it up here: https://msdn.microsoft.com/en-us/library/c02as0cs.aspx)

  5. Hello there, You have done a great job. I’ll definitely digg it and personally recommend to my friends. I’m confident they’ll be benefited from this web site.

  6. Babies and small animals probably love you. Geez, that is unbelievable.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s