[CMake] Using Doxygen with Cmake

Pau Garcia i Quiles pgquiles at elpauer.org
Mon May 21 12:48:08 EDT 2007


Quoting Raja Yalamanchili <yrpchandu at gmail.com>:

> Hi,
> I want to know whether cmake can be useful in generating doxygen
> documentation automatically when i execute my source code.I mean to say
> whenever i run my code i want doxygen to generate documentation
> automatically with ( if any )modifications.Is there a way in cmake to do
> this?

Indeed. There is a FindDoxygen.cmake package.

You may find useful the following code, which creates a "make doc"  
target in you project:

# Create a "make doc" target using Doxygen
# Prototype:
#     GENERATE_DOCUMENTATION(doxygen_config_file)
# Parameters:
#    doxygen_config_file    Doxygen configuration file (must in the  
root of the source directory)


MACRO(GENERATE_DOCUMENTATION DOXYGEN_CONFIG_FILE)
FIND_PACKAGE(Doxygen)
SET(DOXYFILE_FOUND false)
IF(EXISTS ${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE})
     SET(DOXYFILE_FOUND true)
ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE})

IF( DOXYGEN_FOUND )
     IF( DOXYFILE_FOUND )
	# Add target
         ADD_CUSTOM_TARGET( doc ALL ${DOXYGEN_EXECUTABLE}  
"${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE}" )

	# Add .tag file and generated documentation to the list of files we  
must erase when distcleaning

	# Read doxygen configuration file
	FILE( READ ${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE} DOXYFILE_CONTENTS )
	STRING( REGEX REPLACE "\n" ";" DOXYFILE_LINES ${DOXYFILE_CONTENTS} )

	# Parse .tag filename and add to list of files to delete if it exists
	FOREACH( DOXYLINE ${DOXYFILE_CONTENTS} )
  	    STRING( REGEX REPLACE ".*GENERATE_TAGFILE *= *([^ ^\n]+).*"  
"\\1" DOXYGEN_TAG_FILE ${DOXYLINE} )
	ENDFOREACH( DOXYLINE )
	ADD_TO_DISTCLEAN( ${PROJECT_BINARY_DIR}/${DOXYGEN_TAG_FILE} )

	# Parse doxygen output doc dir and add to list of files to delete if  
it exists
	FOREACH( DOXYLINE ${DOXYFILE_CONTENTS} )
	    STRING( REGEX REPLACE ".*OUTPUT_DIRECTORY *= *([^ ^\n]+).*" "\\1"  
DOXYGEN_DOC_DIR ${DOXYLINE} )
	ENDFOREACH( DOXYLINE )
	ADD_TO_DISTCLEAN( ${PROJECT_BINARY_DIR}/${DOXYGEN_DOC_DIR} )
	ADD_TO_DISTCLEAN( ${PROJECT_BINARY_DIR}/${DOXYGEN_DOC_DIR}.dir )

     ELSE( DOXYFILE_FOUND )
	MESSAGE( STATUS "Doxygen configuration file not found - Documentation  
will not be generated" )
     ENDIF( DOXYFILE_FOUND )
ELSE(DOXYGEN_FOUND)
     MESSAGE(STATUS "Doxygen not found - Documentation will not be generated")
ENDIF(DOXYGEN_FOUND)
ENDMACRO(GENERATE_DOCUMENTATION)

-- 
Pau Garcia i Quiles
http://www.elpauer.org
(Due to the amount of work, I usually need 10 days to answer)



More information about the CMake mailing list