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 为这些函数创建调用图。这是我的预期:

但这是我得到的:

看来 test.c 上的 X-macro 是罪魁祸首。我设法让它工作 2 件事(两者都会做):

  1. 重命名 test.x 这样 doxygen 就找不到了。它会显示警告,但是 调用图正确。
  2. test.x 末尾添加尾随换行符。通常文件会结束 X(3).
  3. 之后

问题:

如何在不编辑文件的情况下从 doxygen 中获取可靠的调用图? 是否有我需要更改的设置,或者这是一个简单的错误?

我对 xmacros 有不同的体验。一般来说,Doxygen 会将宏视为适当的声明,而不是实际预处理它们。为了让宏工作(这包括 x-macros)。总的来说:

  1. 设置MACRO_EXPANSION=yes
  2. 设置 EXPAND_ONLY_PREDEF=yes(这将使 Doxygen 扩展 所有 宏)或
  3. 将宏的名称添加到 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