admin管理员组文章数量:1794759
ruby生成C++头文件引用关系图
首先生成graphviz的dot格式文件
代码语言:javascript代码运行次数:0运行复制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这样调用关系就生成了
本文标签: ruby生成C头文件引用关系图
版权声明:本文标题:ruby生成C++头文件引用关系图 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754904296a1708006.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论