build / src / CMakeLists.txt DoxyfileThe build, in my case, occurs in the build directory. But the assembly can be done from anywhere. So, if you change the build directory, the documentation will not be collected, because Doxygen will not find the sources for which you need to collect this very documentation. Then I wondered how to manage the process of assembling documentation in conjunction with CMake and Doxygen ? What if I need to get several types of documentation: a user and a developer? Keep two configuration files for Doxygen ? I do not like this option, because files will differ in the value of only one ENABLED_SECTIONS variable. Below I will tell you about how you can manage the assembly of documentation.
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) SET (DOXYGEN_INPUT ${CMAKE_SOURCE_DIR}) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doxygen.conf. in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ADD_CUSTOM_TARGET(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) ELSE (DOXYGEN_FOUND) MESSAGE(STATUS "WARNING: Doxygen not found - Reference manual will not be created" ) ENDIF (DOXYGEN_FOUND) * This source code was highlighted with Source Code Highlighter .
* This source code was highlighted with Source Code Highlighter .
- MACRO (CONFIGURE_DOXYGEN_FILE DOXYGEN_CONFIG_FILE FILE_NAME_SUFFIX)
- IF (EXISTS $ {PROJECT_SOURCE_DIR} / $ {DOXYGEN_CONFIG_FILE})
- FILE (REMOVE $ {CMAKE_CURRENT_BINARY_DIR} / doxy - $ {FILE_NAME_SUFFIX} .conf)
- FILE (READ $ {PROJECT_SOURCE_DIR} / $ {DOXYGEN_CONFIG_FILE} DOXYFILE_CONTENTS)
- STRING (REGEX REPLACE ";" "\\\\;" DOXYFILE_CONTENTS "$ {DOXYFILE_CONTENTS}" )
- STRING (REGEX REPLACE "\ n" ";" DOXYFILE_LINES "$ {DOXYFILE_CONTENTS}" )
- LIST (LENGTH DOXYFILE_LINES ROW)
- MATH (EXPR ROW "$ {ROW} - 1" )
- FOREACH (I RANGE $ {ROW})
- LIST ( GET DOXYFILE_LINES $ {I} LINE)
- IF (LINE STRGREATER "" )
- STRING (REGEX MATCH "^ [a-zA-Z] ([^]) +" DOXY_PARAM $ {LINE})
- IF (DEFINED DOXY _ $ {DOXY_PARAM})
- STRING (REGEX REPLACE "= ([^ \ n]) +" "= $ {DOXY _ $ {DOXY_PARAM}}" LINE $ {LINE})
- ENDIF (DEFINED DOXY _ $ {DOXY_PARAM})
- ENDIF ()
- FILE (APPEND $ {CMAKE_CURRENT_BINARY_DIR} / doxy - $ {FILE_NAME_SUFFIX} .conf "$ {LINE} \ n" )
- ENDFOREACH ()
- ELSE ()
- MESSAGE (SEND_ERROR "Doxygen configuration file '$ {DOXYGEN_CONFIG_FILE}' not found. Documentation will not be generated" )
- ENDIF ()
- ENDMACRO (CONFIGURE_DOXYGEN_FILE)
* This source code was highlighted with Source Code Highlighter .
- MACRO (ADD_DOCUMENTATION TARGET DOXYGEN_CONFIG_FILE)
- FIND_PACKAGE (Doxygen)
- IF (DOXYGEN_FOUND)
- CONFIGURE_DOXYGEN_FILE ($ {DOXYGEN_CONFIG_FILE} $ {TARGET})
- ADD_CUSTOM_TARGET ($ {TARGET} COMMAND $ {DOXYGEN_EXECUTABLE} $ {CMAKE_CURRENT_BINARY_DIR} / doxy - $ {TARGET} .conf)
- ELSE (DOXYGEN_FOUND)
- MESSAGE (STATUS "Doxygen not found. Documentation will not be generated" )
- ENDIF (DOXYGEN_FOUND)
- ENDMACRO (ADD_DOCUMENTATION)
* This source code was highlighted with Source Code Highlighter .
- SET (DOXY_OUTPUT_LANGUAGE "Russian" )
- SET (DOXY_INPUT $ {PROJECT_SOURCE_DIR})
- ADD_DOCUMENTATION (doc Doxyfile)
* This source code was highlighted with Source Code Highlighter .
- SET (DOXY_OUTPUT_LANGUAGE "Russian" )
- SET (DOXY_INPUT $ {PROJECT_SOURCE_DIR})
- SET (DOXY_ENABLED_SECTIONS "user_sec" )
- SET (DOXY_OUTPUT_DIRECTORY "$ {CMAKE_CURRENT_BINARY_DIR} / doc-user" )
- ADD_DOCUMENTATION (user_doc Doxyfile)
- SET (DOXY_ENABLED_SECTIONS "developer_sec" )
- SET (DOXY_OUTPUT_DIRECTORY "$ {CMAKE_CURRENT_BINARY_DIR} / doc-developer" )
- ADD_DOCUMENTATION (developer_doc Doxyfile)
- ADD_CUSTOM_TARGET (doc DEPENDS user_doc developer_doc)
Source: https://habr.com/ru/post/133512/
All Articles