2012-03-03 111 views
5

我有一个包含具有相同名称的两个函数是C项目,但每个是不同的基团/模块(@defgroup)内。处理具有相同名称的两个不同的功能中的Doxygen

这些函数每个都编译成不同的二进制文件,但我需要将文档紧密地交叉引用,所以我需要从其他模块中引用(@ref)这些函数(以及其他地方)。

当我做简单的@ref name-of-the-function时,它总是链接到驻留在文件树中较早的文件中的那个。我怎样才能链接到另一个?

+0

显而易见的是:你可以重命名函数,避免名称冲突? – 2012-03-03 19:09:15

+0

@JörgBeyer号这些是我必须提供的API的一部分(我必须提供这两者)。 – 2012-03-03 19:12:48

+0

您的C API具有相同名称的函数吗?我认为Doxygen将是你的最后一个问题...... – 2012-03-03 19:18:22

回答

1

这可以为你工作吗?

该示例剥离下来的两个文件交流转换器b.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和链接工作(他们从一个函数的每个文档链接到另一个函数)。

+0

但是你链接到组,而不是功能,对吗? (在我的情况下包含函数的组还包含许多其他功能和由该组代表的子系统的大量文档,因此仅仅连接到组是不理想的)。 – 2012-03-03 20:11:30

+0

你是对的,我更新了它。我现在似乎是((其他)文件中的函数的链接。 – 2012-03-03 20:31:31

+0

这似乎只链接文件的页面,而不是函数。 – 2012-03-03 20:43:22

1

至于我可以看到:的Doxygen的autolinking不支持具有相同名称的多个功能。

如果有多个功能/具有相同名称的方法,将Doxygen的只是链接它找到的第一个,如在问题说明。调用图也是不正确的。这似乎适用于所有的语言,不只是C.

这已被报告为一个bug多次:

D部分"Known problems"氧的文档也描述了类似的问题:

这是不可能在A类 使用\涉及或\ relatesalso命令插入非成员函数f,如果类A已经与名称的 构件f和相同的参数列表。


有一些希望;有人提出了一个补丁来更好地处理具有相同名称的功能:656694 - getDefs fails to resolve local function names if same global name exist

此修补程序实现以下两个策略来解决 重复的名称。首先,是在当前文件中定义的名称,使用 的本地名称。其次尝试使用原型 定义来匹配名称。

这会部分解决问题。不幸的是,自2012年以来,该门票没有任何活动...

0

doxygen 1.8.13中的一个解决方案是为HTML <a></a>提供明确的链接。例如,我有一个功能QF_run(),它在三个不同的文件qv.c,qk.cqxk.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输出呈现方式为自动生成的链接相同。只要您不更改函数的名称,链接也是稳定的。

要获得函数的散列值,只需在浏览器中打开它的文档,并在#号后复制链接。

相关问题