【发布时间】:2015-06-25 12:06:49
【问题描述】:
我正在尝试使用 Doxygen 记录一个用 CUDA C 编写的项目。该文档工作正常。但是调用者图表不包括内核调用,如GPU_foo<<<1,1>>>()。
例如,在这个简单的例子中:
#include<stdio.h>
/*!
* @brief global hello foo
*/
__global__ void global_hello(void){
printf("Hello\n");
}
/*!
* @brief CPU hello foo
*/
void hello(void){
printf("Hello\n");
}
/*!
* @brief main
*/
int main(){
hello();
global_hello<<<1,1>>>();
return 0;
}
对应的 Doxyfile:
PROJECT_NAME = TEST
PROJECT_NUMER = 2.1
OUTPUT_LANGUAGE = English
EXTRACT_ALL = YES
FILE_PATTERNS = *.cpp *.h *.c *.cu
RECURSIVE = NO
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
HAVE_DOT = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
查看生成的文档时,调用图如下所示:
main -----> hello
而不是想要的:
------> global_hello
/
main
\
------> hello
如何让 Doxygen 了解 CUDA 内核调用?
问题是 Doxygen 不知道包含“>>”的行是一个函数调用。我不需要调用图来区分函数调用和内核调用。如果解析器将内核视为普通函数调用就足够了。
总结。有没有办法告诉 Doxygen 将带有 >> 的行解释为函数调用? 有人建议更改 Doxygen 的内部解析器方法,该怎么做?
【问题讨论】:
-
如果在 doxyfile 中添加特定的
EXTENSION_MAPPING会怎样,例如here -
我相信默认情况下 Doxygen 将未知扩展视为 C。但是添加 "EXTENSION_MAPPING = cu=c++" 或 cu=c 会产生相同的结果,函数的正确文档但调用者图不正确。