如何 运行 在 CMake 脚本中通过 Conan 包安装的 Doxygen 二进制文件?

How to run the Doxygen binary installed by its Conan package inside a CMake script?

目前,我使用我编写的两个函数以编程方式生成 conanfile.txt

message(STATUS "Fetching Doxygen from Conan.")
add_project_dependencies(${PROJECT_NAME}_docs CONAN BUILD_DEPS REQUIRED doxygen/1.9.1)
link_project_dependencies(${PROJECT_NAME}_docs PRIVATE)

他们一起创造 ${CMAKE_BINARY_DIR}/deps_${PROJECT_NAME}_docs/conanfile.txt:


[requires]


[build_requires]
doxygen/1.9.1

[generators]
cmake_find_package

[options]


[imports]

然后他们 运行 conan install . 在那个目录中并且成功构建了 Doxygen。当我使用 cmake_find_package 生成器时,也会在该目录中创建一个 Finddoxygen.cmake。到目前为止,一切都很好。但是,找到这样的包裹:

find_package(doxygen REQUIRED)

未提供应有的 DOXYGEN_EXECUTABLE(已设置为 DOXYGEN_EXECUTABLE-NOTFOUND)。它也不提供 doxygen_add_docs() 供使用。所以根据 FindDoxygen docs , and as the conan-generated Finddoxygen.cmake contains target definition for doxygen::doxygen I thought I should use the generator expressions (as per here):

add_custom_target(docs
    COMMAND $<TARGET_FILE:doxygen::doxygen> ${DOXYGEN_OUT}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating API documentation with Doxygen"
    VERBATIM)

但这会产生错误:Target "doxygen::doxygen" is not an executable or library. 那个或 LOCATION 目标 属性 都不起作用;我使用 查看目标的属性:

doxygen::doxygen IMPORTED = TRUE
doxygen::doxygen IMPORTED_GLOBAL = FALSE
doxygen::doxygen INTERFACE_COMPILE_OPTIONS = ;
doxygen::doxygen INTERFACE_LINK_LIBRARIES = ;xapian::xapian;ZLIB::ZLIB;$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:>;$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:>;$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:>
doxygen::doxygen NAME = doxygen::doxygen
doxygen::doxygen TYPE = INTERFACE_LIBRARY

并且它不提供任何 属性 包含在 ~/.conan/data/doxygen/1.9.1/_/_/package/ff3ada3b39a52bebe18da7d8c32a4aead970f75c/bin/doxygen 处生成的 doxygen 二进制文件的路径。

那么如何在我的 CMake 脚本中使用它呢?我错过了什么吗?因为看this resolved issue中的示例用法,看来我的做法是正确的,应该找到二进制文件并设置DOXYGEN_EXECUTABLE.

这可以通过使用 CONAN_BIN_DIRS_DOXYGEN/doxygen 来实现。

还有其他有用变量的列表:https://docs.conan.io/en/latest/reference/generators/cmake.html