如何通过doxygen扩展宏,但没有记录为定义?

时间:2010-09-17 04:20:45

标签: c++ c doxygen

说我有:

#define MY_MACRO(FOO) void FOO();

MY_MACRO(hi);
MY_MACRO(hey);
MY_MACRO(hello);

#undef MY_MACRO

我希望通过doxygen扩展宏,我可以通过正确的方式配置它来实现:

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES
EXPAND_AS_DEFINED      = MY_MACRO

这使我能够在doxygen输出中看到宏的扩展结果(函数hiheyhello)。到目前为止,这一切都很好。但问题是,doxygen还会将MY_MACRO作为定义进行记录。但是,我不希望API的客户端知道MY_MACRO,因为它没有用,并且不能被它们使用,并且不应该对它们可见。

我的doxygen配置中有EXTRACT_ALL = YES,我不想改变它。我尝试了以下配置但没有成功:

PREDEFINED      = DOXYGEN_SKIP_FOR_USERS

使用以下代码:

#ifndef DOXYGEN_SKIP_FOR_USERS
#define MY_MACRO(FOO) void FOO();
#endif /*DOXYGEN_SKIP_FOR_USERS*/

MY_MACRO(hi);
MY_MACRO(hey);
MY_MACRO(hello);

#undef MY_MACRO

这隐藏了define的文档,但当然会阻止扩展,所以我没有在生成的API中记录这些函数。

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

假设MY_是您在代码中一致使用的前缀:)我将使用前缀MY__(两个下划线)作为内部宏,然后添加类似

的内容
EXCLUDE_SYMBOLS        = MY__*

Doxygen配置文件中。

编辑:内部符号的双下划线是为C ++保留的(不适用于C)。因此,如果您想要与C和C ++兼容,您应该选择其他类型的约定。不幸的是,保留了一个前导下划线,因此_MY_也不会这样做。