X-macro打破了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()。
- level2的:
- 引用level3()和level4()。
- 由level1()引用。
- 3级:
- 参考文献level4()。
- 由level1()和level2()引用。
- 级别4:
- 由level1(),level2()和level3()引用。
但这是我得到的:
- 1级:
- 引用level2(),level3()和level4()。
- level2的:
- 由level1()引用。
- 3级:
- 由level1()引用。
- 级别4:
- 由level1()引用。
看来test.c上的X-macro是罪魁祸首。 我设法通过做两件事来做到这一点(要么会做):
- 重命名
test.x
所以doxygen找不到它。 它会显示警告,但是调用图是正确的。 - 在
test.x
末尾添加尾随换行符。 通常文件会在X(3)
之后立即结束。
题:
如何在不编辑文件的情况下从doxygen中获取可靠的调用图? 我需要改变一个设置还是这个普通的bug?
我对xmacros有不同的经验。 通常,Doxygen会将宏视为正确的声明,而不是实际预处理它们。 为了让宏工作(这包括x-macros)。 一般来说:
- 设置
MACRO_EXPANSION=yes
- 设置
EXPAND_ONLY_PREDEF=yes
(这将使Doxygen扩展所有宏)或 - 将您的宏名称添加到
EXPAND_AS_DEFINED
。
另外,请注意: http : //www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_skip_function_macros
为了让您了解xmacros和Doxygen的可能性,我可以从中生成适当的文档: https : //github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95