ruby生成C++头文件引用关系图
首先生成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++头文件引用关系图相关推荐
- gsoap 学习 1-由wsdl文件生成h头文件
开始前先看一下用户向导吧 http://www.cs.fsu.edu/~engelen/soap.html 中左侧点击Documentation 英语水平确实有限,有些内容可能说的不准确,敬请参考向导 ...
- 【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )
文章目录 类的定义 ( 头文件引用次数控制 ) 类的实现 ( 构造函数 | 析构函数 ) CMake 编译配置 类测试 ( 构造析构调用测试 ) 类的定义 ( 头文件引用次数控制 ) 类定义 , 类一 ...
- 解决javah生成c头文件时找不到android类库的问题
解决javah生成c头文件时找不到android类库的问题 参考文章: (1)解决javah生成c头文件时找不到android类库的问题 (2)https://www.cnblogs.com/liul ...
- AndroidStudio快速生成JNI头文件
依次打开Settings-->Tools-->External Tools-->点击加号创建一个快速生成jni头文件的工具 Program: javah Parameters: -v ...
- C语言基础专题 - 头文件引用
C语言基础专题 - 头文件引用 本文介绍了C语言中头文件的引用方法 阅读本文前推荐阅读C语言预处理 1.
- python二郎成长笔记(一)(pip升级,python入门,基础,python2和3不同格式带来的问题,头文件引用的格式,变量的类型,__name__ == '__main__')
二郎的操作系统是windows,之前同时安装了python2和python3,因此在一些应用中还涉及了版本切换以及安装插件等问题. 同时安装是指在Anaconda中完成的,Anaconda(官方网站) ...
- android studio生成Jni头文件 java10,java11删除了javah,改用javac直接用源码生成jni头文件。 java8是用javah
android studio生成Jni头文件 鼠标放本地方法上去,点提示来创建. java10,java11及以上 生成jni头文件 java10,java11删除了javah.改用javac直接 ...
- linux vscode中添加头文件路径,vscode中c/c++头文件引用找不到飘红
正在进行 GTK 学习, 但是在 vscode GTK 的头文件找不到(头文件引用底下飘红, 逼死强迫症), 影响敲字键入速度. 解决一下该问题-- vscode中c/c++头文件引用找不到(#inc ...
- Linux之头文件引用小技巧(二十九)
Linux之头文件引用小技巧 0.需求: 将本地头文件引用,#include "test.h"更换为#include <test.h>系统引用方式.1.目录结构如下├─ ...
最新文章
- Linux操作系统下查看硬件信息的命令总结
- 开工的欲望 | AI Studio上线新功能,用你的模型生成在线预测服务
- 深入理解viewport
- 10/100. Majority Element
- zookeeper学习之原理
- MySQL datediff()函数
- lua检测表中是否有某个值_Lua检测数组(tabble)中是否包含某个值
- spring boot高性能实现二维码扫码登录(上)——单服务器版
- C语言二维数组中的指针问题
- idea 父文件_万事开头难!最新MyBatis程序配置教程(IDEA版)
- Asp.Net Web API(四)
- ubuntu15.04安装wps-office的64位版
- 中文依存句法分析概述及应用
- Python 进阶——从 list 到 NumPy 的多维数组
- Linux 系统硬盘MBR转换为GPT格式并扩容
- ECNU || 梵高先生
- 1月16日服务器例行维护更新公告,1月16日9—11点例行更新维护公告
- 智商黑洞(门萨Mensa测试)11
- 笔记本WIN7建立共享wifi的简单方法
- 计算机主机安全属性包括,计算机安全属性包括哪些
热门文章
- 2022-2028年中国联合办公行业深度调研及投资前景预测报告
- Python+OpenCV 图像处理系列(1)— Ubuntu OpenCV安装、图片加载、显示和保存
- Django学习之路(一)--初识django
- Jupyter Magic - Timing(%%time %time %timeit)
- PointRCNN: 点云的3D目标生成与检测
- 摄像头与毫米波雷达(Radar)融合
- 2021年大数据Spark(四):三种常见的运行模式
- java gui 案例_JavaGui入门—布局的嵌套使用附实例
- Python3 使用replace 替换空格无效
- ViewPager 实现界面加载不同的数据