我有一个C项目,其中包含两个具有相同名称的函数,但每个函数都位于不同的组/模块中(@defgroup
)。
这些函数每个都编译成不同的二进制文件,但我需要将文档密切交叉引用,因此我需要将(@ref
)引用到彼此模块的这些函数(以及其他地方)。 / p>
当我执行简单@ref name-of-the-function
时,它总是链接到文件树中较早的文件中的文件。我如何链接到另一个?
答案 0 :(得分:2)
据我所知: doxygen的自动链接不支持具有相同名称的多个功能。
如果有多个具有相同名称的函数/方法,doxygen将简单地链接它找到的第一个函数/方法,如问题中所述。调用图也不正确。这似乎适用于所有语言,而不仅仅适用于C.
多次报告此错误:
doxygen的文档中的"Known problems"部分也描述了类似的问题:
无法在A类中插入非成员函数f 如果A类已经有了,则使用\ relate或\ relatedalso命令 名为f的成员和相同的参数列表。
有一些希望;有人提出了一个补丁来更好地处理具有相同名称的函数:656694 - getDefs fails to resolve local function names if same global name exist。
此补丁实现了以下两种解决策略 重复的名字。首先,名称是在当前文件中定义的,使用 本地名称。其次尝试使用原型匹配名称 定义
这可以部分解决问题。不幸的是,这张票从2012年开始没有活动......
答案 1 :(得分:1)
这对你有用吗?
该示例被剥离为两个文件 a.c 和 b.c ,只有一个函数(碰撞)函数。
档案a.c
/**
* \defgroup agroup Group A
*/
/**
* the function in a,
* see also \link b.c myfunc() \endlink the other one
* \ingroup agroup
*/
void myfunc() {
;
}
文件b.c
/**
* \defgroup bgroup Group B
*/
/**
* the function in b,
* see also \link a.c myfunc() \endlink the other one
* \ingroup bgroup
*/
void myfunc() {
;
}
如您所见,myfunc()
有一个名称冲突。我在文档中放置了其他功能的链接。
我通过文件名来扩充功能名称。
我用 doxygen 编译它,链接工作(它们从函数的每个文档链接到另一个函数)。
答案 2 :(得分:1)
在doxygen 1.8.13中适用于我的解决方案是提供与HTML <a></a>
标记的显式链接。例如,我有一个函数QF_run()
,它由三个不同的文件qv.c
,qk.c
和qxk.c
定义。以下是这三个定义的三个链接:
<a href="qv_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
<a href="qk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
<a href="qxk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
这些链接在HTML输出中呈现的方式与自动生成的链接相同。只要您不更改函数的名称,链接也是稳定的。
要获取函数的哈希值,只需在浏览器中打开其文档并复制#符号后面的链接。
答案 3 :(得分:0)
没有答案,但是C ++枚举存在相同的问题。
我们通常很懒,并将main.cpp从我们的一个CLI工具复制到下一个... 因此它们都包含:
enum class Command {
USAGE,
SOME_COMMAND,
}
这些工具大多数是诊断程序,PoC,用于库的实时测试工具等...
我们从所有资源中构建一个文档,因此即使该enum的多个声明位于不同的目录中,也只能在该文档中仅在解析的第一个文件中一次找到该声明,并且该声明将包含所有声明的值在所有文件中...使用clang解析不会更改任何内容...
那是非常误导的。调用图当然也是错误的...