Хобрук: Ваш путь к мастерству в программировании

CMake для Doxygen

Я пытаюсь использовать документацию, созданную CMake для Doxygen. Вот как выглядит мой CMakeList.txt:

if (DOXYGEN_FOUND)
    # set input and output files
    set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/config-file)
    set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}doc)

    # request to configure the file
    configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
    message("Doxygen build started")

    # note the option ALL which allows to build the docs together with the application
    add_custom_target( doc_doxygen ALL
        COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        COMMENT "Generating API documentation with Doxygen"
        VERBATIM )
else (DOXYGEN_FOUND)
  message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)

При запуске make я получаю следующие ошибки:

Doxygen build started
-- Configuring done
-- Generating done
-- Build files have been written to: /home/newproject/build
[  5%] Generating API documentation with Doxygen
warning: tag INPUT: input source `doc/mainpage.txt' does not exist
warning: tag INPUT: input source `src/player.cpp' does not exist
warning: tag INPUT: input source `src/player.h' does not exist
warning: tag INPUT: input source `test/tests-mainfunctionality-v2.cpp' does not exist
error: tag OUTPUT_DIRECTORY: Output directory `doc' does not exist and cannot be created
Exiting...
CMakeFiles/doc_doxygen.dir/build.make:57: recipe for target 'CMakeFiles/doc_doxygen' failed
make[2]: *** [CMakeFiles/doc_doxygen] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/doc_doxygen.dir/all' failed
make[1]: *** [CMakeFiles/doc_doxygen.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

хотя эти файлы существуют. Что-то не так с путями, которые я использую?

31.03.2020

  • Параметр WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} означает, что исполняемый файл doxygen будет вызываться из каталога build. Таким образом, к src/player.cpp нельзя получить доступ из этого каталога. 31.03.2020
  • Ах понял! @Tsyvarev, есть ли способ напрямую открыть файл index.html из какой-либо команды в CMakeLists? 31.03.2020
  • @FSJ Чтобы открыть сгенерированную документацию (например, index.html) с помощью CMake, см. ответ здесь. 31.03.2020

Ответы:


1

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

INPUT = ../doc/mainpage.txt \
        ../src/player.cpp \
        ../src/player.h \
        ../test/tests-mainfunctionality-v2.cpp

Кроме того, использование вами DOXYGEN_OUT выглядит немного странно, так как в настоящее время он установлен на что-то вне бинарного каталога. Эта переменная должна указывать имя файла, чтобы ваши configure_file() и пользовательские целевые команды работали правильно. Возможно, попробуйте переименовать его как-то так:

# check if Doxygen is installed
find_package(Doxygen)
if (DOXYGEN_FOUND)
    # set input and output files
    set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/config-file)
    set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/config-file.doxygen)

    # request to configure the file
    configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
    message("Doxygen build started")

    # note the option ALL which allows to build the docs together with the application
    add_custom_target( doc_doxygen ALL
        COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        COMMENT "Generating API documentation with Doxygen"
        VERBATIM )
else (DOXYGEN_FOUND)
  message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)
31.03.2020
  • Я написал здесь /doc set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/config-file.doxygen), предполагая, что это место, куда будет помещена документация после сборки. Разве это не так? Кроме того, в настоящее время, когда я запускаю make, он работает нормально, но по какой-то причине создается дополнительная папка build.... Есть идеи, почему? 31.03.2020
  • @FSJ Нет, когда вы запускаете doxygen, вам нужно предоставить ему файл конфигурации. Поэтому, когда вы запускаете COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} в своей пользовательской цели, ${DOXYGEN_OUT} должен быть файлом конфигурации. Вы указываете где разместить сгенерированную документацию внутри самого файла конфигурации. Найдите переменную OUTPUT_DIRECTORY в конфигурационном файле Doxygen, и вы можете установить для нее значение ../doc или doc в вашем случае. 31.03.2020
  • Тогда в чем именно разница между /config-file и config-file.doxygen. На данный момент у меня есть только один файл конфигурации в моем корне, который фактически создает документацию. 31.03.2020
  • Вы используете configure_file() для копирования config-file из вашего корня в каталог сборки, а аргумент @ONLY может вносить изменения в этот файл. Поскольку вы копируете файл конфигурации Doxygen в каталог build, кажется, что вы хотите запустить Doxygen из этого каталога. Я просто переименовал скопированный файл в config-file.doxygen, чтобы было более понятно, что это файл конфигурации Doxygen. 31.03.2020
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...