3.2.1.2 : La génération de la documentation

Voici le create_doc.cmake : Petite fonction qui appelle Doxygen avec la bonne configuration (voir section 3.3.1) :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Create the target to create the documentation of the current project
# 	projectName : name of the project to be used
# 	doxyfileName : name of the Doxyfile cmake macro to be used to generate the documentation
function(phoenix_create_doc projectName doxyfileName)
	find_path(doxygen_BINNARY_DIR
		NAMES doxygen
		PATHS "${PHOENIX_PREFIX}/bin" ${CMAKE_INSTALL_PREFIX}/bin ${CMAKE_INCLUDE_PATH}/bin /usr/bin /usr/local/bin /bin $ENV{HOME}/usr/bin
	)
	if(doxygen_BINNARY_DIR)
		file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html)
		message(STATUS "program doxygen found create doc target by project ${projectName}")
		
		file(GLOB_RECURSE allDocFiles ${CMAKE_SOURCE_DIR}/*.cpp *.h *.dox)
		string(REGEX REPLACE "${CMAKE_BINARY_DIR}[^;]+;?" "" allDocFiles "${allDocFiles}")
		
		set(PROJECT_LOGO ${CMAKE_CURRENT_SOURCE_DIR}/logo.png)
		set(OUTPUT_DOC_DIR ${CMAKE_CURRENT_BINARY_DIR}/)
		
		configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${doxyfileName} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
		set(targetName "phoenix_doc_${projectName}")
		add_custom_command(
			OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doc.txt
			OUTPUT ${targetName}
			COMMENT "doxygen documentation generation for project ${projectName}"
			COMMAND doxygen ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
			DEPENDS ${allDocFiles}
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
		)
		add_custom_target(${targetName} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doc.txt)
		
		if(NOT TARGET doc)
			add_custom_target(doc)
		endif()
		add_dependencies(doc ${targetName})
		
		install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/${projectName}/doc)
	else()
		message(STATUS "program doxygen not found for project ${projectName}")
	endif()
endfunction(phoenix_create_doc)


Le fichier create_doc.cmake complet :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Create the target to create the documentation of the current project
# 	projectName : name of the project to be used
# 	doxyfileName : name of the Doxyfile cmake macro to be used to generate the documentation
function(phoenix_create_doc projectName doxyfileName)
	find_path(doxygen_BINNARY_DIR
		NAMES doxygen
		PATHS "${PHOENIX_PREFIX}/bin" ${CMAKE_INSTALL_PREFIX}/bin ${CMAKE_INCLUDE_PATH}/bin /usr/bin /usr/local/bin /bin $ENV{HOME}/usr/bin
	)
	if(doxygen_BINNARY_DIR)
		file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html)
		message(STATUS "program doxygen found create doc target by project ${projectName}")
		
		file(GLOB_RECURSE allDocFiles ${CMAKE_SOURCE_DIR}/*.cpp *.h *.dox)
		string(REGEX REPLACE "${CMAKE_BINARY_DIR}[^;]+;?" "" allDocFiles "${allDocFiles}")
		
		set(PROJECT_LOGO ${CMAKE_CURRENT_SOURCE_DIR}/logo.png)
		set(OUTPUT_DOC_DIR ${CMAKE_CURRENT_BINARY_DIR}/)
		
		configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${doxyfileName} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
		set(targetName "phoenix_doc_${projectName}")
		add_custom_command(
			OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doc.txt
			OUTPUT ${targetName}
			COMMENT "doxygen documentation generation for project ${projectName}"
			COMMAND doxygen ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
			DEPENDS ${allDocFiles}
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
		)
		add_custom_target(${targetName} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doc.txt)
		
		if(NOT TARGET doc)
			add_custom_target(doc)
		endif()
		add_dependencies(doc ${targetName})
		
		install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/${projectName}/doc)
	else()
		message(STATUS "program doxygen not found for project ${projectName}")
	endif()
endfunction(phoenix_create_doc)
Lien de téléchargement ici.