【问题标题】:Build doxygen from CMake script从 CMake 脚本构建 doxygen
【发布时间】:2016-04-25 00:20:15
【问题描述】:

我在网上找到了一个示例 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 文档;理想情况下,仅在构建发布配置时。

【问题讨论】:

  • 您显示的 CMake 文件创建了一个构建目标 doc,它生成 doxymentation - 这意味着运行例如make doc(或等效的)将生成它。那对你有用吗?还是你需要别的东西?
  • 我正在使用 QT Creator 中的项目。并且不从命令行运行某些东西。在 /build/myproject/ 中,它无需其他命令即可工作。只需通过 IDE 的“构建”
  • 必须有一个名为doc 的“项目/目标/QtCreator 术语”。构建将构建您的文档的构建。请注意,因为在 add_custom_target 命令中的 doc 之后没有 ALL 参数,所以 doc 目标不是 make all(或等效项)的一部分。
  • 谢谢。它对我有用 - 将所有添加的文档标记到构建过程中。但是想了解如何仅包含到发布配置中。你知道如何配置吗?

标签: cmake doxygen


【解决方案1】:

您显示的 CMake 文件的设置方式,它创建了一个名为 doc 的目标;构建该目标(例如运行make doc)会生成doxymentation。目标不是make all(或等效项)的一部分;为此,请将ALL 添加到自定义目标创建中:

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

如果您想将此目标限制为仅在特定配置中构建(正如您在 cmets 中提到的),您可以使用generator expressions

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
)

【讨论】:

  • 最新版本产生错误:“[33%] 使用 Doxygen 生成 API 文档文件名、目录名或卷标语法不正确。jom: C:\dev\workspace\build\myproject\ doc\CMakeFiles\doc.dir\build.make [doc\CMakeFiles\doc] 错误 1"。你知道这是什么意思吗?
  • @amigo421 嗯,有些 CMake 生成器可能不喜欢空的 COMMAND。我添加了一个更安全的选项
  • 感谢您的耐心等待。我刚刚开始 cmake 学习,但需要让项目正常工作。但是最后一个版本也不适用于我的 cmake 。让我告诉你错误(那个版本有两个)
  • 第一个:doc/CMakeLists.txt 中的 CMake 警告 (dev):C:/dev/workspace/myproject/doc/CMakeLists.txt:19:90 的 cmake 代码中的语法警告 参数未分开从前面的记号用空格。此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。
  • 第二个(如果你不知道“jom” - 这类似于 nmake 实用程序):命令的语法不正确。 jom: C:\dev\workspace\build\myproject\doc\CMakeFiles\doc.dir\build.make [doc\CMakeFiles\doc] 错误 1 ​​[100%] 构建目标 myproject jom: C:\dev\workspace\build \myproject\CMakeFiles\Makefile2 [doc\CMakeFiles\doc.dir\all] Error 2 jom: C:\dev\workspace\build\myproject\Makefile [all] Error 2. 我想第二个和第一个一样,就在项目构建阶段
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2013-10-09
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多