从CMake脚本构建doxygen

ami*_*421 13 doxygen cmake

我在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()
Run Code Online (Sandbox Code Playgroud)

它不适用于我,它只复制原始配置文件,/build/my/project/doc/并且不做任何其他操作.

我想要的是在我的构建期间生成doxygen文档; 理想情况下,仅在构建Release配置时.

Rei*_*ica 11

设置了CMake文件的方式,它会创建一个名为的目标doc; 构建目标(例如运行make doc)会生成doxymentation.目标不属于make all(或等效); 为此,添加ALL到自定义目标创建中:

add_custom_target(
  doc ALL
  COMMAND #... everything else as before
)
Run Code Online (Sandbox Code Playgroud)

如果要将此目标限制为仅在特定配置中构建(如在注释中所述),则可以使用生成器表达式:

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
)
Run Code Online (Sandbox Code Playgroud)

可能会发生一些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
)
Run Code Online (Sandbox Code Playgroud)