Documentation generation produces consumable output in one command
Building the docs target now generates the reference and leaves finished documents in the build tree's docs directory: pdf/ holds the compiled PDF, html/ holds the browsable reference when that format is enabled. Doxygen and LaTeX work under docs/tmp/, which clean removes along with the rest of the tree. The reference has a front page and a structure. The markdown documents in docs/ are part of the input, OVERVIEW.md becomes the landing page, and the rest follow as chapters ahead of the namespace, class, and file reference. The module contract, previously a plain comment block invisible to Doxygen, is a page in its own right. Struct and enum members throughout the headers carry documentation, on their own lines above what they describe.
This commit is contained in:
@@ -164,7 +164,10 @@ option(DPM_DOCS_PDF "Generate the code reference as PDF (requires LaTeX)" ON)
|
||||
|
||||
find_package(Doxygen)
|
||||
if(DOXYGEN_FOUND)
|
||||
set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/docs)
|
||||
# Doxygen and LaTeX both work in scratch space under docs/tmp. The
|
||||
# finished document is copied up into docs/, so the directory a user
|
||||
# opens holds documentation and nothing else.
|
||||
set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/docs/tmp)
|
||||
set(DOXYGEN_EXTRACT_ALL YES)
|
||||
set(DOXYGEN_EXTRACT_STATIC YES)
|
||||
set(DOXYGEN_QUIET YES)
|
||||
@@ -185,24 +188,45 @@ if(DOXYGEN_FOUND)
|
||||
set(DOXYGEN_GENERATE_LATEX NO)
|
||||
endif()
|
||||
|
||||
doxygen_add_docs(docs
|
||||
# OVERVIEW.md becomes the reference's front page, so the generated
|
||||
# document opens on the project description instead of a bare index.
|
||||
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE ${CMAKE_CURRENT_SOURCE_DIR}/docs/OVERVIEW.md)
|
||||
|
||||
doxygen_add_docs(docs-generate
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/docs
|
||||
COMMENT "Generating code reference with Doxygen"
|
||||
)
|
||||
|
||||
# The one target a user builds. Everything below hangs off it, so
|
||||
# `cmake --build <dir> --target docs` produces finished documents.
|
||||
add_custom_target(docs COMMENT "Building the code reference")
|
||||
add_dependencies(docs docs-generate)
|
||||
|
||||
if(DPM_DOCS_PDF)
|
||||
find_program(PDFLATEX_EXECUTABLE pdflatex)
|
||||
if(PDFLATEX_EXECUTABLE)
|
||||
add_custom_target(docs-pdf
|
||||
COMMAND make -C ${CMAKE_BINARY_DIR}/docs/latex
|
||||
COMMENT "Building PDF code reference"
|
||||
add_custom_command(TARGET docs POST_BUILD
|
||||
COMMAND make -C ${CMAKE_BINARY_DIR}/docs/tmp/latex
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_BINARY_DIR}/docs/tmp/latex/refman.pdf
|
||||
${CMAKE_BINARY_DIR}/docs/pdf/dpm-core-${PROJECT_VERSION}.pdf
|
||||
COMMENT "Compiling the PDF reference"
|
||||
)
|
||||
add_dependencies(docs-pdf docs)
|
||||
else()
|
||||
message(WARNING "DPM_DOCS_PDF is ON but pdflatex was not found; the docs-pdf target is unavailable")
|
||||
message(WARNING "DPM_DOCS_PDF is ON but pdflatex was not found; no PDF will be produced")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(DPM_DOCS_HTML)
|
||||
add_custom_command(TARGET docs POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
${CMAKE_BINARY_DIR}/docs/tmp/html
|
||||
${CMAKE_BINARY_DIR}/docs/html
|
||||
COMMENT "Placing the HTML reference"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user