2010-04-15 63 views
8

我一直在尝试使用Doxygen来记录我的C++项目,但收效甚微:Doxygen无法识别某些宏,因此整个函数被错误解释,并且大部分时间都不会生成文档,即使它们有特殊的注释块。案例分析:对于上述类生成正确使用Doxygen

/** 
* \def  __MYLIB_FUNCTION_ATTRIBUTE(...) 
* \brief Some brief comment 
* \details Detailed doc 
* \sa  Some valid references 
*/ 
#define __MYLIB_FUNCTION_ATTRIBUTE(...) __attribute__(__VA_ARGS__) 

/** 
* \def  IN 
* \brief Tag for input arguments to a function 
* \details Blah... 
* \sa  OUT 
*/ 
#define IN 

/** 
* \def  OUT 
* \brief Tag for output arguments to a function 
* \details Blah... 
* \sa  IN 
*/ 
#define OUT 

class MyClass { 
public: 

    /** 
    * \fn  MyClass() 
    * \brief  Constructor for MyClass 
    * \details Hi! 
    */ 
    __MYLIB_FUNCTION_ATTRIBUTE(__always_inline__) 
    MyClass() { 
    } 

    /** 
    * \fn  const char *doNothing(const char *s IN) 
    * \brief  A weird function 
    * \details Some very weird doc 
    * \param[in] s No good parameter 
    */ 
    const char* __SXC_FUNCTION_ATTRIBUTE(__const__) doNothing(const char *s IN) { 
     return s; 
    } 
}; 

文档一直缺少doNothingIN的描述被解释为功能!我在这里做错了什么?

+0

什么是MACRO_EXPANSION等的值。 (http://www.doxygen.nl/config.html#cfg_macro_expansion)在你的配置文件? – 2010-04-15 15:51:45

+0

@Eric:我认为你遇到了问题头! MACRO_EXPANSION设置为YES,但是是否还需要指定其他包含目录?目前所有使用的标题也都由Doxygen处理。我会回顾其余的参数并回复你。 – themoondothshine 2010-04-15 15:59:46

+0

这里是配置PARAMS: 'ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES' – themoondothshine 2010-04-15 16:07:43

回答

4

两件事情:

1)doxygen的解析器不 “看” 到 “IN” 在doNothing(因为它是在预处理阶段去除),所以\ FN不应该包括它:const char* doNothing(const char* s)。顺便说一下,这不是必须的:如果紧靠记录在案的实体之前,Doxygen会自动将评论关联起来。

2)我不知道是什么__SXC_FUNCTION_ATTRIBUTE扩展到,但是,如果是类似__MYLIB_FUNCTION_ATTRIBUTE的东西,它可能混淆的Doxygen。作为一种变通方法,您既可以在使用Doxygen的配置文件的预定区段定义这些宏不了了之,或者有条件地在源定义它们,就像这样:

#ifdef DOXYGEN 
// Doxygen does not grok the normal definition of this 
#define __MYLIB_FUNCTION_ATTRIBUTE(...) 
#else 
#define __MYLIB_FUNCTION_ATTRIBUTE(...) __attribute__(__VA_ARGS__) 
#endif 

,并把预定义= Doxygen的在你的配置文件。

+0

@Eric:真棒!!你的解决方案工作起来很轻松!这绝对是+1。谢谢。 – themoondothshine 2010-04-16 17:22:17