如何启用find_package(Doxygen)搜索特定文件夹以找到doxygen.exe?

问题描述 投票:0回答:1

我想使用 doxygen 记录我的 C++ 源代码。 我通过在本地 PC 中安装 doxygen 成功,并且当 CMakelists.txt 尝试

find_package(Doxygen)
时,它成功并且正在生成文档。

现在我发现 doxygen 可执行文件可以轻松下载而无需安装,我觉得我应该卸载 doxygen 的本地安装,并应该使用 Windows 特定的

doxygen.exe
来自动化我的任务并将其分享给其他人。

因此,我在本地 PC 中卸载了 doxygen,并在我的存储库中创建了一个单独的子目录,其中包含 doxygen.exe 和 libclang.dll 文件(它们由 doxygen 本身提供。)

如果我现在执行 find_package(Doxygen),我的 CMake 如何使用 find_package 找到存储库 doxygen 可执行文件?或者我还应该在这里做其他事情吗?

我尝试将目录附加到 CMake_module_path 广告仍然不成功,find_package 无法检测到。

function(component_documentation)
  find_package(Doxygen QUIET)

  if(NOT Doxygen_FOUND)
    message(
      STATUS
        "Doxygen not found - Documentation for ${PROJECT_NAME} will not be built."
    )
    return()
  endif()

  if(Doxygen_FOUND)
    # Eliminate DOXYGEN_INPUT if present to avoid clash with FindDoxygen.cmake
    if(NOT DOXYGEN_INPUT)
      set(PRO_DOXYGEN_INPUT
          ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/doc
          ${CMAKE_CURRENT_SOURCE_DIR}/README.md
          ${CMAKE_CURRENT_SOURCE_DIR}/other.md)
    else()
      set(PRO_DOXYGEN_INPUT ${DOXYGEN_INPUT})
      unset(${DOXYGEN_INPUT})
    endif()

    # default doxygen settings
    if(NOT DOXYGEN_PROJECT_NAME)
      set(DOXYGEN_PROJECT_NAME ${PROJECT_NAME})
    endif()
    if(NOT DOXYGEN_RECURSIVE)
      set(DOXYGEN_RECURSIVE YES)
    endif()
    if(NOT DOXYGEN_USE_MDFILE_AS_MAINPAGE)
      set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${CMAKE_CURRENT_SOURCE_DIR}/other.md")
    endif()
    if(NOT DOXYGEN_HTML_EXTRA_STYLESHEET)
      set(DOXYGEN_HTML_EXTRA_STYLESHEET doc/style/style.css)
    endif()
    if(NOT DOXYGEN_HTML_EXTRA_FILES)
      set(DOXYGEN_HTML_EXTRA_FILES
          doc/style/background.jpg doc/style/ams-visual-data.jpg
          doc/style/specific-Book.otf
          doc/style/specific-Medium.otf)
    endif()
    if(NOT DOXYGEN_HTML_HEADER)
      set(DOXYGEN_HTML_HEADER doc/style/headerFile)
    endif()
    if(NOT DOXYGEN_HTML_FOOTER)
      set(DOXYGEN_HTML_FOOTER doc/style/footerFile)
    endif()
    if(NOT DOXYGEN_PROJECT_LOGO)
      set(DOXYGEN_PROJECT_LOGO doc/style/Logo_with_tagline_black_sRGB.png)
    endif()

    # -- needed for plantuml diagram generation
    find_file(DOXYGEN_PLANTUML_JAR_PATH plantuml.jar $ENV{PLANTUML_JAR_PATH}
              /scripts/plantuml)

    doxygen_add_docs(DOCUMENTATION ${PRO_DOXYGEN_INPUT})
    install(
      DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/
      COMPONENT DOCUMENTATION
      DESTINATION doc/${PROJECT_NAME})
  endif(Doxygen_FOUND)
endfunction()

c++ cmake doxygen
1个回答
0
投票

我找到了答案,使用 PATH 选项。我一开始并没有注意到这一点。所以我将命令修改为

find_package(Doxygen REQUIRED PATHS ${CMAKE_CURRENT_SOURCE_DIR}/tools}
。然后 find_package 能够找到确切的工具并能够运行命令。

© www.soinside.com 2019 - 2024. All rights reserved.