从 CMake 脚本构建 doxygen
Build doxygen from CMake script
我在网上找到了一个示例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
的目标;构建该目标(例如 运行 make doc
)会生成 doxymentation。目标不是 make all
(或等价物)的一部分;为此,将 ALL
添加到自定义目标创建中:
add_custom_target(
doc ALL
COMMAND #... everything else as before
)
如果你想限制这个目标只在特定配置中构建(正如你在评论中提到的),你可以使用 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
。考虑到这一点,以下内容应该是 fail-safe:
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
)
我在网上找到了一个示例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
的目标;构建该目标(例如 运行 make doc
)会生成 doxymentation。目标不是 make all
(或等价物)的一部分;为此,将 ALL
添加到自定义目标创建中:
add_custom_target(
doc ALL
COMMAND #... everything else as before
)
如果你想限制这个目标只在特定配置中构建(正如你在评论中提到的),你可以使用 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
。考虑到这一点,以下内容应该是 fail-safe:
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
)