Reference
- home page: Graphviz
- user guide: User Guide — graphviz 0.20.1 documentation
- repo: graphviz / graphviz · GitLab
- wiki: Graphviz - Wikipedia
Introduction
非常棒的学习对象,学习构建一个自己的工具。不少常见应用(confluence, doxygen, sphinx 等)都通过插件的方式用上它。
- 提供 python 接口,可以快速构图
- 提供 cmd line,包括 dot 等多个 binary
- 提供插件,给 confluence,doxygen 等提供服务
- 定义了 dot 语言
Example
- 生成 dot 文件
cmake --graphviz=dot_file_prefix .. 每个目标都会生成一个 dot 文件
- 将 dot 文件转成图片,
dot -Tsvg graph_sublas.dot.gtest_trsv > graph_trsv.svg

dot 语言如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| digraph "gtest_trsv" { node [ fontsize = "12" ]; "node137" [ label = "gtest_trsv", shape = egg ]; "node1" [ label = "/home/jenkins/workspace/xxx/build/openblas_binary_file/lib/libopenblas.a", shape = septagon ]; "node137" -> "node1" [ style = dotted ] // gtest_trsv -> /home/jenkins/workspace/xxx/build/openblas_binary_file/lib/libopenblas.a "node3" [ label = "gtest", shape = octagon ]; "node137" -> "node3" [ style = dotted ] // gtest_trsv -> gtest "node4" [ label = "Threads::Threads", shape = pentagon ]; "node3" -> "node4" // gtest -> Threads::Threads "node5" [ label = "-pthread", shape = septagon ]; "node4" -> "node5" [ style = dashed ] // Threads::Threads -> -pthread "node6" [ label = "gtest_main", shape = octagon ]; "node137" -> "node6" [ style = dotted ] // gtest_trsv -> gtest_main "node4" [ label = "Threads::Threads", shape = pentagon ]; "node6" -> "node4" // gtest_main -> Threads::Threads "node3" [ label = "gtest", shape = octagon ]; "node6" -> "node3" // gtest_main -> gtest "node7" [ label = "openblas_static\n(openblas)", shape = octagon ]; "node137" -> "node7" // gtest_trsv -> openblas_static "node5" [ label = "-pthread", shape = septagon ]; "node7" -> "node5" // openblas_static -> -pthread "node8" [ label = "driver_level2", shape = hexagon ]; "node7" -> "node8" // openblas_static -> driver_level2 "node9" [ label = "driver_level3", shape = hexagon ]; "node7" -> "node9" // openblas_static -> driver_level3 "node10" [ label = "driver_others", shape = hexagon ]; "node7" -> "node10" // openblas_static -> driver_others "node11" [ label = "interface", shape = hexagon ]; "node7" -> "node11" // openblas_static -> interface "node12" [ label = "kernel", shape = hexagon ]; "node7" -> "node12" // openblas_static -> kernel "node13" [ label = "pthread", shape = septagon ]; "node137" -> "node13" [ style = dotted ] // gtest_trsv -> pthread "node14" [ label = "xxx", shape = doubleoctagon ]; "node137" -> "node14" [ style = dotted ] // gtest_trsv -> xxx }
|
summary
学习 graphviz 来制作一个属于自己的工具。
todo
cmake 是如何集成 graphviz 的,graphviz 是如何让 cmake 集成的。