X-macro 破坏了 doxygen 调用图
X-macro breaks doxygen callgraph
我有 3 个文件:
test.c
int table[] = {
#define X(val) val,
#include "test.x"
#undef X
};
void level2(void) {
level3();
level4();
}
void level3(void) {
level4();
}
test2.c
void level1(void) {
level2();
level3();
level4();
}
void level4(void) {
}
test.x
X(1)
X(2)
X(3)
我使用 doxygen 为这些函数创建调用图。这是我的预期:
- 1级:
- 引用 level2()、level3() 和 level4()。
- 2级:
- 引用 level3() 和 level4()。
- 由 level1() 引用。
- 3级:
- 引用 level4()。
- 由 level1() 和 level2() 引用。
- 4级:
- 由 level1()、level2() 和 level3() 引用。
但这是我得到的:
- 1级:
- 引用 level2()、level3() 和 level4()。
- 2级:
- 由 level1() 引用。
- 3级:
- 由 level1() 引用。
- 4级:
- 由 level1() 引用。
看来 test.c 上的 X-macro 是罪魁祸首。我设法让它工作
2 件事(两者都会做):
- 重命名
test.x
这样 doxygen 就找不到了。它会显示警告,但是
调用图正确。
- 在
test.x
末尾添加尾随换行符。通常文件会结束
X(3)
. 之后
问题:
如何在不编辑文件的情况下从 doxygen 中获取可靠的调用图?
是否有我需要更改的设置,或者这是一个简单的错误?
我对 xmacros 有不同的体验。一般来说,Doxygen 会将宏视为适当的声明,而不是实际预处理它们。为了让宏工作(这包括 x-macros)。总的来说:
- 设置
MACRO_EXPANSION=yes
- 设置
EXPAND_ONLY_PREDEF=yes
(这将使 Doxygen 扩展 所有 宏)或
- 将宏的名称添加到
EXPAND_AS_DEFINED
。
此外,请注意:http://www.doxygen.nl/manual/config.html#cfg_skip_function_macros
为了让您了解 xmacros 和 Doxygen 的可能性,我可以从中生成适当的文档:https://github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95
我有 3 个文件:
test.c
int table[] = {
#define X(val) val,
#include "test.x"
#undef X
};
void level2(void) {
level3();
level4();
}
void level3(void) {
level4();
}
test2.c
void level1(void) {
level2();
level3();
level4();
}
void level4(void) {
}
test.x
X(1)
X(2)
X(3)
我使用 doxygen 为这些函数创建调用图。这是我的预期:
- 1级:
- 引用 level2()、level3() 和 level4()。
- 2级:
- 引用 level3() 和 level4()。
- 由 level1() 引用。
- 3级:
- 引用 level4()。
- 由 level1() 和 level2() 引用。
- 4级:
- 由 level1()、level2() 和 level3() 引用。
但这是我得到的:
- 1级:
- 引用 level2()、level3() 和 level4()。
- 2级:
- 由 level1() 引用。
- 3级:
- 由 level1() 引用。
- 4级:
- 由 level1() 引用。
看来 test.c 上的 X-macro 是罪魁祸首。我设法让它工作 2 件事(两者都会做):
- 重命名
test.x
这样 doxygen 就找不到了。它会显示警告,但是 调用图正确。 - 在
test.x
末尾添加尾随换行符。通常文件会结束X(3)
. 之后
问题:
如何在不编辑文件的情况下从 doxygen 中获取可靠的调用图? 是否有我需要更改的设置,或者这是一个简单的错误?
我对 xmacros 有不同的体验。一般来说,Doxygen 会将宏视为适当的声明,而不是实际预处理它们。为了让宏工作(这包括 x-macros)。总的来说:
- 设置
MACRO_EXPANSION=yes
- 设置
EXPAND_ONLY_PREDEF=yes
(这将使 Doxygen 扩展 所有 宏)或 - 将宏的名称添加到
EXPAND_AS_DEFINED
。
此外,请注意:http://www.doxygen.nl/manual/config.html#cfg_skip_function_macros
为了让您了解 xmacros 和 Doxygen 的可能性,我可以从中生成适当的文档:https://github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95