我想让我的doxygen主页列出我所有的子项目,并参考他们各自的README.md
文件。
在每个子项目的CMakeLists.txt(每个项目都在自己的子文件夹中)中,我调用函数REGISTER_TARGET(my_project_name)
,该函数定义为
macro(REGISTER_TARGET TARGET)
# Storing target name and directory as 2D-array
SET(GLOBAL_TARGETS "${GLOBAL_TARGETS};${TARGET}\;${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "source_list")
# doing other things concerning the build
...
endmacro(REGISTER_TARGET)
在我的doxygen的CMakeLists.txt中我做了
SET(DOXYGEN_GLOBAL_TARGETS "")
foreach(pair ${GLOBAL_TARGETS})
LIST(GET pair 0 local_project_name)
LIST(GET pair 1 local_project_dir)
SET(local_project_readme "${local_project_dir}/README.md")
LIST(APPEND DOXYGEN_FILES ${local_project_readme})
SET(DOXYGEN_GLOBAL_TARGETS "${DOXYGEN_GLOBAL_TARGETS}\n- ${local_project_name}. @ref ${local_project_readme}")
endforeach()
...
CONFIGURE_FILE("${DOXYGEN_MAINFILE_IN}" "${DOXYGEN_MAINFILE}" @ONLY)
我的DOXYGEN_MAINFILE_IN看起来像
This is the main page
======
Sub projects
------------
@DOXYGEN_GLOBAL_TARGETS@
这在DOXYGEN_MAINFILE中显示为:
This is the main page
======
Sub projects
------------
- name_of_project1. @ref C:/very/ugly/source/path/name_of_project1/README.md
- name_of_project2. @ref C:/very/ugly/source/path/name_of_project2/README.md
没有正确链接到此文件(在HTML中,显示整个路径,最后一个路径呈现为超链接,但引用空文件)。一个条目的HTML看起来类似于
<li>name_of_project1. C:/very/ugly/<a class="el" href="da/ddd/README_8md.html">source/path/name_of_project1/README.md</a></li>
所以
a)如何将my中的markdown文件的绝对路径转换为工作的@ref目标(它还将第一个标题显示为链接文本)。请记住,上述文件路径是 source-directory ,因此doc文件将位于完全不同的位置。
OR
b)我必须在我的REGISTER_TARGET CMake宏中序列化哪些信息,然后可以在这样的超链接中进行转换。
我知道这在理论上是可行的(OpenCV在相当similar way中完成它但我没有重现它)