Сборка doxygen из сценария CMake

Я нашел в Интернете пример файла cmake и поместил его в /doc подкаталог моего проекта, где файл myproject.doxgen также расположен, содержащий конфигурацию Doxygen.

Я проверил, что работает doxygen.exe myproject.doxygen выдает корректные выходные данные. Мне нужно только встроить это в процесс CMake. Так что /doc/CMakeLists.txt - это:

find_package(Doxygen)
option(BUILD_DOCUMENTATION "Create and install the HTML based API        
documentation (requires Doxygen)" ${DOXYGEN_FOUND})

if(BUILD_DOCUMENTATION)
    if(NOT DOXYGEN_FOUND)
         message(FATAL_ERROR "Doxygen is needed to build the documentation.")
    endif()

    set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/../doc/myproject.doxygen)
    set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/doxyfile)

    configure_file(${doxyfile_in} ${doxyfile} @ONLY)

    message("Doxygen build started.")

    add_custom_target(doc
                      COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile_in}
                      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
                      COMMENT "Generating API documentation with Doxygen"
                      VERBATIM)

    #    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION     share/doc)
endif()

это не работает для меня, он только копирует исходный файл в /build/my/project/doc/ и больше ничего не делает.

то, что я хочу, это создать документация doxygen во время моих сборок; в идеале, только при создании конфигурации выпуска.

1 ответов


способ настройки файла CMake, который вы показали, создает цель под названием doc; построение этой цели (например, запуск make doc) генерирует doxymentation. Цель не является частью make all (или эквивалент); чтобы сделать его таким, добавьте ALL в нестандартной цели создания:

add_custom_target(
  doc ALL
  COMMAND #... everything else as before
)

если вы хотите ограничить эту цель только сборкой в определенной конфигурации (как вы упомянули в комментариях), вы можете использовать генератор выражения:

add_custom_target(
  doc ALL
  COMMAND $<$<CONFIG:Release>:${DOXYGEN_EXECUTABLE} ${doxyfile_in}>
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
  COMMENT "Generating API documentation with Doxygen"
  VERBATIM
)

может случиться так, что некоторые генераторы CMake не справляются с пустым COMMAND. Имея это в виду, следующее должно быть отказоустойчивым:

add_custom_target(
  doc ALL
  COMMAND
    $<$<CONFIG:Release>:${DOXYGEN_EXECUTABLE} ${doxyfile_in}>
    $<$<NOT:$<CONFIG:Release>>:${CMAKE_COMMAND} -E echo "Only done in Release builds">
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
  COMMENT "Generating API documentation with Doxygen"
  VERBATIM
)