利用gcc预处理文件和doxygen分析宏定义多的复杂c工程
某个c语言工程,无法直接gdb调试,代码中宏定义、宏函数满天飞、临时生成config.h、头文件在其他工程中。
阅读难度很大,doxygen分析也很困难。我发明了一个新方法:
1. gcc编译时,-save-temps,生成 .i 预处理文件。
2. clang-format、sed等工具处理下.i文件,调整格式方便doxygen分析。doxygen不如编译器智能,直接处理.i文件出错多。
1. make时在CFLAG之类的变量里 += -save-temps,类似gcc -E 的效果。展开头文件和宏
2. 处理文件
改后缀
for file in *.i; do mv "$file" "${file%.i}.c"; done
替换#
find . -type f -name "*.c" -exec sed -i 's/#\ /\/\//g' {} +
去掉__attribute__
find . -type f -name "*.c" -exec sed -i 's/__attribute__\ (([^)]\+)))/ /g' {} +
find . -type f -name "*.c" -exec sed -i 's/__attribute__\ (([^)]\+))/ /g' {} +
此时可以clang-format 一下,配置是GNU。不做可能也行
3. doxgen -g
设置 Doxyfile
EXTRAC_ALL=YES
EXTRAC_STATIC=YES
CALL_GRAPH=YES
CALLER_GRAPH=YES