首先生成graphviz的dot格式文件

require 'find'
class RefNodeattr_accessor :name,:reference
end
include Find
if __FILE__ == $0name = "name"dot = []h = Hash.newputs ["digraph #{name}{","overlap = false","spline = true","ranksep=1.5"].join("\n")Find.find('XX/dir1','XX/dir2') do |path|path = path.downcaseif (path.end_with?(".h") && !path.end_with?("stdafx.h"))headers = []File.readlines(path).each do |line|line = linebeginm = /^\s*#include\s+"(.*?)"\s*/.match(line)rescuebeginm = /^\s*#include\s+"(.*?)"\s*/u.match(line)rescueendendif (m)headers<<File.basename(m[1]).downcaseendendheaders.each do |header|if h.key?(header)h[header]<<File.basename(path);elseh[header] = []endendendendh.keys.each do |key|if (h[key].size > 3)src = key#sprintf("%d %s",h[key].size,key)color = sprintf("%.4f,%.4f,%.4f",1 - h[key].size/150.0,1 - h[key].size/150.0,1 - h[key].size/150.0)dot << sprintf("\nnode[color=\"%s\"]\nedge[color=\"%s\"]\n\"%s\"",color,color,src)h[key].each do |header|dot << sprintf("\t\"%s\"->\"%s\"",header,src)endendendputs dot.join("\n") puts "}\n"end

  生成格式大概是这样的

node[color="0.9733,0.9733,0.9733"]
edge[color="0.9733,0.9733,0.9733"]
"tagnode.h"
"tagdocument.h"->"tagnode.h"
"tagelement.h"->"tagnode.h"
"tagnodecollection.h"->"tagnode.h"

然后调用graphviz 的命令行 fdp -Tpng XX.dot -o XX.png这样调用关系就生成了

转载于:https://www.cnblogs.com/marryZhan/archive/2011/10/17/2215148.html

ruby生成C++头文件引用关系图相关推荐

  1. gsoap 学习 1-由wsdl文件生成h头文件

    开始前先看一下用户向导吧 http://www.cs.fsu.edu/~engelen/soap.html 中左侧点击Documentation 英语水平确实有限,有些内容可能说的不准确,敬请参考向导 ...

  2. 【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )

    文章目录 类的定义 ( 头文件引用次数控制 ) 类的实现 ( 构造函数 | 析构函数 ) CMake 编译配置 类测试 ( 构造析构调用测试 ) 类的定义 ( 头文件引用次数控制 ) 类定义 , 类一 ...

  3. 解决javah生成c头文件时找不到android类库的问题

    解决javah生成c头文件时找不到android类库的问题 参考文章: (1)解决javah生成c头文件时找不到android类库的问题 (2)https://www.cnblogs.com/liul ...

  4. AndroidStudio快速生成JNI头文件

    依次打开Settings-->Tools-->External Tools-->点击加号创建一个快速生成jni头文件的工具 Program: javah Parameters: -v ...

  5. C语言基础专题 - 头文件引用

    C语言基础专题 - 头文件引用 本文介绍了C语言中头文件的引用方法 阅读本文前推荐阅读C语言预处理 1.

  6. python二郎成长笔记(一)(pip升级,python入门,基础,python2和3不同格式带来的问题,头文件引用的格式,变量的类型,__name__ == '__main__')

    二郎的操作系统是windows,之前同时安装了python2和python3,因此在一些应用中还涉及了版本切换以及安装插件等问题. 同时安装是指在Anaconda中完成的,Anaconda(官方网站) ...

  7. android studio生成Jni头文件 java10,java11删除了javah,改用javac直接用源码生成jni头文件。 java8是用javah

    android studio生成Jni头文件 鼠标放本地方法上去,点提示来创建. java10,java11及以上   生成jni头文件 java10,java11删除了javah.改用javac直接 ...

  8. linux vscode中添加头文件路径,vscode中c/c++头文件引用找不到飘红

    正在进行 GTK 学习, 但是在 vscode GTK 的头文件找不到(头文件引用底下飘红, 逼死强迫症), 影响敲字键入速度. 解决一下该问题-- vscode中c/c++头文件引用找不到(#inc ...

  9. Linux之头文件引用小技巧(二十九)

    Linux之头文件引用小技巧 0.需求: 将本地头文件引用,#include "test.h"更换为#include <test.h>系统引用方式.1.目录结构如下├─ ...

最新文章

  1. Linux操作系统下查看硬件信息的命令总结
  2. 开工的欲望 | AI Studio上线新功能,用你的模型生成在线预测服务
  3. 深入理解viewport
  4. 10/100. Majority Element
  5. zookeeper学习之原理
  6. MySQL datediff()函数
  7. lua检测表中是否有某个值_Lua检测数组(tabble)中是否包含某个值
  8. spring boot高性能实现二维码扫码登录(上)——单服务器版
  9. C语言二维数组中的指针问题
  10. idea 父文件_万事开头难!最新MyBatis程序配置教程(IDEA版)
  11. Asp.Net Web API(四)
  12. ubuntu15.04安装wps-office的64位版
  13. 中文依存句法分析概述及应用
  14. Python 进阶——从 list 到 NumPy 的多维数组
  15. Linux 系统硬盘MBR转换为GPT格式并扩容
  16. ECNU || 梵高先生
  17. 1月16日服务器例行维护更新公告,1月16日9—11点例行更新维护公告
  18. 智商黑洞(门萨Mensa测试)11
  19. 笔记本WIN7建立共享wifi的简单方法
  20. 计算机主机安全属性包括,计算机安全属性包括哪些

热门文章

  1. 2022-2028年中国联合办公行业深度调研及投资前景预测报告
  2. Python+OpenCV 图像处理系列(1)— Ubuntu OpenCV安装、图片加载、显示和保存
  3. Django学习之路(一)--初识django
  4. Jupyter Magic - Timing(%%time %time %timeit)
  5. PointRCNN: 点云的3D目标生成与检测
  6. 摄像头与毫米波雷达(Radar)融合
  7. 2021年大数据Spark(四):三种常见的运行模式
  8. java gui 案例_JavaGui入门—布局的嵌套使用附实例
  9. Python3 使用replace 替换空格无效
  10. ViewPager 实现界面加载不同的数据