web-dev-qa-db-ja.com

CMakeスクリプトからdoxygenを構築する

Webでサンプルの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ドキュメントを生成することです。理想的には、リリース構成を構築するときのみです。

15
amigo421

表示した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
)
11
Angew