Doxygen 中的动态超 link 参考
Dynamic hyper link reference in Doxygen
Doxygen 是否可以构建诸如 link 之类的引用只在某处定义一次并且对它的任何引用都会得到相应的重定向?
这将允许 \see
命令指向正确的资源,而不需要在代码中的任何地方复制 URL,同时如果需要的话可以很容易地更改所说的 link。
生成的文档看起来有点像这样:
mainpage.md
Useful links are defined here
source.c 文件参考
(...)
See also
A guide to something //points to URL defined in mainfile.md
[编辑]
感谢评论中的@albert,我已经设法使用 \snippetdoc
做到了这一点,但是 block-id 之后的任何文本都会使 doxygen 无法呈现代码段。
工作示例:
知道我的 link 是在 docs/mainpage.dox 文件中这样定义的:
[url_to_link1]
<a href="linkToSomething">Link description</a>
[url_to_link1]
[url_to_link2]
<a href="linkToSomething">Link description</a>
[url_to_link2]
这个有效:
/**
* \file
* \section links "Useful Links"
* - \snippetdoc docs/mainpage.dox url_to_link1
* - \snippetdoc docs/mainpage.dox url_to_link2
*/
这不是:
/**
* \file
* \brief Some function definition
* \see API reference on specific subject (more info: \snippetdoc docs/mainpage.dox url_to_link1)
*/
Doxygen 版本为 1.8.14
如问题和评论中所述,此问题的解决方案在于命令 \snippetdoc
,另一种方法是定义 ALIAS
(在 Doxyfile
doxygen 配置文件中)供参考,并在需要的地方使用定义的命令/别名。
如 OP 所示,通过 \snippetdoc
可能的解决方案是:
/**
* \file
* \section links "Useful Links"
* - \snippetdoc docs/mainpage.dox url_to_link1
* - \snippetdoc docs/mainpage.dox url_to_link2
*/
以下版本无法按照 OP 指示运行:
/**
* \file
* \brief Some function definition
* \see API reference on specific subject (more info: \snippetdoc docs/mainpage.dox url_to_link1)
*/
问题是 \snippetdoc
的定义是 \snippetdoc <file-name> ( block_id )
其中 (block_id)
意味着它读取到行尾(参见 doxygen 文档),因此结束 )
是 block_id
的一部分,无法解析。
可能更好的实现方式是 <block_id>
,这样 block_id
就是一个单词。这样做的问题是它可能会破坏现有文档,例如block_id
.
中使用空格或点
这个问题有多种解决方案:
1) 将结束 )
定义为 block_id
的一部分(在非工作版本中):
[url_to_link1)]
<a href="linkToSomething">Link description</a>)
[url_to_link1)]
2) 将结尾 )
放在下一行(定义可以保留在问题中):
/**
* \file
* \brief Some function definition
* \see API reference on specific subject (more info: \snippetdoc docs/mainpage.dox url_to_link1
* )
*/
3)定义2个定义:
[url_to_link1)]
<a href="linkToSomething">Link description</a>)
[url_to_link1)]
[url_to_link1]
<a href="linkToSomething">Link description</a>
[url_to_link1]
我一般的解决方案2)作为解决方案的首选方案。 block_id
之后的所有文本都必须在下一行。
Doxygen 是否可以构建诸如 link 之类的引用只在某处定义一次并且对它的任何引用都会得到相应的重定向?
这将允许 \see
命令指向正确的资源,而不需要在代码中的任何地方复制 URL,同时如果需要的话可以很容易地更改所说的 link。
生成的文档看起来有点像这样:
mainpage.md
Useful links are defined here
source.c 文件参考
(...)
See also
A guide to something //points to URL defined in mainfile.md
[编辑]
感谢评论中的@albert,我已经设法使用 \snippetdoc
做到了这一点,但是 block-id 之后的任何文本都会使 doxygen 无法呈现代码段。
工作示例:
知道我的 link 是在 docs/mainpage.dox 文件中这样定义的:
[url_to_link1]
<a href="linkToSomething">Link description</a>
[url_to_link1]
[url_to_link2]
<a href="linkToSomething">Link description</a>
[url_to_link2]
这个有效:
/**
* \file
* \section links "Useful Links"
* - \snippetdoc docs/mainpage.dox url_to_link1
* - \snippetdoc docs/mainpage.dox url_to_link2
*/
这不是:
/**
* \file
* \brief Some function definition
* \see API reference on specific subject (more info: \snippetdoc docs/mainpage.dox url_to_link1)
*/
Doxygen 版本为 1.8.14
如问题和评论中所述,此问题的解决方案在于命令 \snippetdoc
,另一种方法是定义 ALIAS
(在 Doxyfile
doxygen 配置文件中)供参考,并在需要的地方使用定义的命令/别名。
如 OP 所示,通过 \snippetdoc
可能的解决方案是:
/**
* \file
* \section links "Useful Links"
* - \snippetdoc docs/mainpage.dox url_to_link1
* - \snippetdoc docs/mainpage.dox url_to_link2
*/
以下版本无法按照 OP 指示运行:
/**
* \file
* \brief Some function definition
* \see API reference on specific subject (more info: \snippetdoc docs/mainpage.dox url_to_link1)
*/
问题是 \snippetdoc
的定义是 \snippetdoc <file-name> ( block_id )
其中 (block_id)
意味着它读取到行尾(参见 doxygen 文档),因此结束 )
是 block_id
的一部分,无法解析。
可能更好的实现方式是 <block_id>
,这样 block_id
就是一个单词。这样做的问题是它可能会破坏现有文档,例如block_id
.
这个问题有多种解决方案:
1) 将结束 )
定义为 block_id
的一部分(在非工作版本中):
[url_to_link1)]
<a href="linkToSomething">Link description</a>)
[url_to_link1)]
2) 将结尾 )
放在下一行(定义可以保留在问题中):
/**
* \file
* \brief Some function definition
* \see API reference on specific subject (more info: \snippetdoc docs/mainpage.dox url_to_link1
* )
*/
3)定义2个定义:
[url_to_link1)]
<a href="linkToSomething">Link description</a>)
[url_to_link1)]
[url_to_link1]
<a href="linkToSomething">Link description</a>
[url_to_link1]
我一般的解决方案2)作为解决方案的首选方案。 block_id
之后的所有文本都必须在下一行。