2017-02-23 22 views
5

我想在C中使用Doxygen生成仿真模板的文档,但没有取得太大的成功。我希望有人知道如何使doxygen预处理器中的宏观欺骗工作?我已经尝试启用“MACRO_EXPANSION”而没有运气。Doxygen for C Tempate Emulation

编辑:这个问题最具变性的形式是: “我该如何让Doxygen以类似C预处理器的方式处理预处理器指令#include?”

我在一个文件夹 “测试”(一个非常人为的例子)以下代码:

templates.h

#ifndef TEMPLATES_H_ 
#define TEMPLATES_H_ 

#define CAT(X,Y) X##_##Y 
#define TEMPLATE(X,Y) CAT(X,Y) 

#endif // TEMPLATES_H_ 

test.h

#ifndef TEST_H_ 
#define TEST_H_ 

#include "templates.h" 

#ifdef TEST_T 
#error "TEST_T cannot be defined prior to this compilation step" 
#endif 

#define TEST_T uint8_t 
#include "test_template.h" 
#undef TEST_T 

#define TEST_T uint16_t 
#include "test_template.h" 
#undef TEST_T 

#endif // TEST_H_ 

test_template.h

#ifdef TEST_T 

#include "templates.h" 

TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b); 

#endif // ifdef TEST_T 

test.c的

#include "test.h" 

#ifdef TEST_T 
#error "TEST_T cannot be defined prior to this compilation step" 
#endif 

#define TEST_T uint8_t 
#include "test_template.c" 
#undef TEST_T 

#define TEST_T uint16_t 
#include "test_template.c" 
#undef TEST_T 

test_template.c

#ifdef TEST_T 

TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b) 
{ 
    return a + b; 
} 

#endif // ifdef TEST_T 

在我doxygen的配置文件:

test.cfg

# Doxyfile 1.8.13 

PROJECT_NAME   = "Test" 
OUTPUT_DIRECTORY  = "docs_test" 
TAB_SIZE    = 3 
OPTIMIZE_OUTPUT_FOR_C = YES 
INPUT     = "../test" 
RECURSIVE    = YES 
MACRO_EXPANSION  = YES 

# Temporary to extract all without tags 
EXTRACT_ALL   = YES 

但是,sum *函数的模板版本不存在于doxygen(.h或.c文档)中;例如,test.h低于(虽然我也很乐意,如果它在test_template.h出现了代替):

doxygen output for test.h

有什么想法?

+1

旁注:请确保您已在文件尾部的换行符(http://stackoverflow.com/q/28499422/694733)做宏观弄虚作假时。 – user694733

+0

有价值的笔记。我个人总是有一条习惯习惯(从长期传过来的系统学到的特征),但它不会显示在上面的代码片段中。 – Squirrel

回答

1

从Doxygen文档: http://www.stack.nl/~dimitri/doxygen/manual/preprocessing.html

如果你不确定的doxygen的预处理的效果会是什么 可以运行的doxygen如下:

doxygen的-d预处理

这将指示doxygen在预处理完成后将输入源转储到标准的 输出(提示:设置QUIET = YES并且 警告= N O在配置文件中禁用任何其他输出)。

将此与Real c预处理器生成的输出进行比较,以确定doxygen扩展实际上与C编译器看到的内容相匹配。

您可能需要调整与doxygen中的预处理相关的配置变量才能使其工作。

这就是说,正如其他人所说的,我不会像这样亲自使用C预处理器,但我同意这是个人意见。该前C处理器可以生成代码同时扩大宏,但它不会产生评论,所有的doxygen的标记被嵌入C注释:

是进场的可能问题。

当然,doxygen的可能回暖,有一个名为sum_uint8_t功能,但要真正添加这个功能文档,源代码都需要在源代码中明确地添加“结构的命令”。

http://www.stack.nl/~dimitri/doxygen/manua/docblocks.html#structuralcommands

+0

奇怪的是,我不能让doxygen转储输入源与“-d预处理器”。我确保了ENABLE_PREPROCESSING = YES,QUIET = YES和WARNINGS = NO。奇怪的是,我会一直搞乱它的。为了回应关于预处理器不粘贴评论的观点,它值得注意。在这个阶段,EXTRACT_ALL = YES在我的配置中,我相信它仍然应该在文档中显示它们(只是没有评论)。 – Squirrel