CMakeGraphVizOptions

CMake 的内置 Graphviz 支持。

生成 Graphviz 文件

CMake 可以生成 Graphviz 文件,展示项目中各目标间的依赖关系,以及链接到的外部库。

使用 --graphviz=foo.dot 选项运行 CMake 时,它会生成

  • 一个 foo.dot 文件,展示项目中的所有依赖关系

  • 针对每个目标进行一个 foo.dot.<target> 文件,展示目标所依赖的其他目标

  • 针对每个目标进行一个 foo.dot.<target>.dependers 文件,展示依赖于该目标的其他目标

可以使用 Graphviz 程序包中的 dot 命令将这些 .dot 文件转换为图像

dot -Tpng -o foo.png foo.dot

3.10 版中新增: 使用实线、虚线和点线分别表示不同的依赖关系类型 PUBLICINTERFACEPRIVATE

Graphviz 支持专用的变量

生成的大量内容可能很大。可以在 CMakeGraphVizOptions.cmake 文件中控制生成内容的外观和内容。首先在 CMAKE_BINARY_DIR,然后在 CMAKE_SOURCE_DIR 中搜索此文件。如果找到,则利用其中设置的变量调整生成的 Graphviz 文件的选项。

GRAPHVIZ_GRAPH_NAME

图表的名称。

GRAPHVIZ_GRAPH_HEADER

写入 Graphviz 文件顶部的标头。

  • 必须:否

  • 默认:"node [ fontsize = "12" ];"

GRAPHVIZ_NODE_PREFIX

Graphviz 文件中每个节点的前缀。

  • 必须:否

  • 默认:"node"

GRAPHVIZ_EXECUTABLES

设置为 FALSE 以从生成的图表中排除可执行文件。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_STATIC_LIBS

设置为 FALSE 以从生成的图表中排除静态库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_SHARED_LIBS

设置为 FALSE,则生成的图表不包括共享库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_MODULE_LIBS

设置为 FALSE,则生成的图表不包括模块库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_INTERFACE_LIBS

设置为 FALSE,则生成的图表不包括接口库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_OBJECT_LIBS

设置为 FALSE,则生成的图表不包括对象库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_UNKNOWN_LIBS

设置为 FALSE,则生成的图表不包括未知库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_EXTERNAL_LIBS

设置为 FALSE,则生成的图表不包括外部库。

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_CUSTOM_TARGETS

设置为 TRUE,则在生成的图表中包括自定义目标。

  • 必须:否

  • 默认值:FALSE

GRAPHVIZ_IGNORE_TARGETS

正则表达式列表,用于表示要从生成的图表中排除的目标名称。

  • 必须:否

  • 默认值:空

GRAPHVIZ_GENERATE_PER_TARGET

设置为 FALSE,则不生成按目标划分的图表 foo.dot.<target>

  • 必须:否

  • 默认:TRUE

GRAPHVIZ_GENERATE_DEPENDERS

设置为 FALSE,则不生成依赖关系图表 foo.dot.<target>.dependers

  • 必须:否

  • 默认:TRUE