2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Ruby

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

时间:09-21来源:作者:点击数:20
CDSY,CDSY.XYZ

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

首先生成graphviz的dot格式文件

  • require 'find'
  • class RefNode
  • attr_accessor :name,:reference
  • end
  • include Find
  • if __FILE__ == $0
  • name = "name"
  • dot = []
  • h = Hash.new
  • puts ["digraph #{name}{","overlap = false","spline = true","ranksep=1.5"].join("\n")
  • Find.find('XX/dir1','XX/dir2') do |path|
  • path = path.downcase
  • if (path.end_with?(".h") && !path.end_with?("stdafx.h"))
  • headers = []
  • File.readlines(path).each do |line|
  • line = line
  • begin
  • m = /^\s*#include\s+"(.*?)"\s*/.match(line)
  • rescue
  • begin
  • m = /^\s*#include\s+"(.*?)"\s*/u.match(line)
  • rescue
  • end
  • end
  • if (m)
  • headers<<File.basename(m[1]).downcase
  • end
  • end
  • headers.each do |header|
  • if h.key?(header)
  • h[header]<<File.basename(path);
  • else
  • h[header] = []
  • end
  • end
  • end
  • end
  • h.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)
  • end
  • end
  • end
  • puts 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这样调用关系就生成了

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐