2011-11-07 27 views
2

最近我们增加了一些代码,使用宏在编译时标记弃用代码。现在Doxygen没有正确记录已弃用的功能。使用Doxygen的记录发送到宏C++函数

#if defined(__GNUC__) 
    #define DEPRECATED(func) func __attribute__((deprecated)) /**< mark a function as deprecated in gcc. */ 

    #elif defined(_MSC_VER) 
    #define DEPRECATED(func) __declspec(deprecated) func /**< mark a function as deprecated in msvc. */ 
    #endif 

注意这是宏的简化版本,这个岗位的实际宏做编译器版本检查等

后来的宏都围绕一个函数用来让编译器知道该功能已经已弃用,因此会发出编译器警告。

/** 
    * myMethod() is deprecated. 
    */ 
    DEPRECATED(
     /** 
     * @deprecated 
     * Description of deprecated function 
     * 
     * @param var this is a parameter 
     * 
     * @return this is returned 
     */ 
     int myMethod(int var) 
    ); 

问题是,Doxygen想要显示DEPRECATED的文档而不是myMethod(int var)。

有谁知道怎么去Doxygen的记录myMethod的,而不是宏观遭到反对?

回答

3

你应该告诉doxygen的,它具有去除DEPRECATED宏。您可以使用配置文件中的下列选项预处理做到这一点:

ENABLE_PREPROCESSING = YES 
MACRO_EXPANSION  = YES 
EXPAND_ONLY_PREDEF  = YES 
PREDEFINED    = "DEPRECATED(x)=x" 

您可以通过与-d Preprocessor选项运行的doxygen调试预处理的结果。当此选项存在时,Doxygen将在执行预处理后将输入文件转储到输出。

欲了解更多信息请参阅http://www.doxygen.org/preprocessing.html

+0

我确实找到了相同的解决方案,并且即将发布。只是注意预定义的值应该是“不提倡使用(X)= X”同列的报价并没有给出正确的结果。解决方案中给出的链接也是我如何找到解决方案的。谢谢 :) – gnash117

1

使用@fn tag明确地告诉哪些块被提及。不如隐式连接方便,但更安全。

+0

那是我试过的第一件事。如果这有效,我不会在这里发布。使用@fn标签的问题是Doxygen需要查看该功能。 – gnash117

+0

@fn标签是你可以从函数中分离文档的。它并非如此,你可以记录Doxygen认为不存在的函数。我曾试图改变MACRO_EXPANSION选项,以便将的Doxygen尝试应用的文件之前处理DEPRICATED宏。我认为这是正确的方向,但我无法实现它的工作。 – gnash117