# CMakeGraphVizOptions

The builtin Graphviz support of CMake.

## Generating Graphviz files

CMake can generate Graphviz files showing the dependencies between the targets in a project, as well as external libraries which are linked against.

When running CMake with the `--graphviz=foo.dot` option, it produces:

- a `foo.dot` file, showing all dependencies in the project

- a `foo.dot.<target>` file for each target, showing on which other targets it depends

- a `foo.dot.<target>.dependers` file for each target, showing which other targets depend on it

Those .dot files can be converted to images using the dot command from the Graphviz package:

    dot -Tpng -o foo.png foo.dot

Added in version 3.10: The different dependency types `PUBLIC`, `INTERFACE` and `PRIVATE` are represented as solid, dashed and dotted edges.

## Variables specific to the Graphviz support

The resulting graphs can be huge. The look and content of the generated graphs can be controlled using the file `CMakeGraphVizOptions.cmake`. This file is first searched in `CMAKE_BINARY_DIR`, and then in `CMAKE_SOURCE_DIR`. If found, the variables set in it are used to adjust options for the generated Graphviz files.

GRAPHVIZ_GRAPH_NAME

  The graph name.

  - Mandatory: NO

  - Default: value of `CMAKE_PROJECT_NAME`

GRAPHVIZ_GRAPH_HEADER

  The header written at the top of the Graphviz files.

  - Mandatory: NO

  - Default: "node [ fontsize = "12" ];"

GRAPHVIZ_NODE_PREFIX

  The prefix for each node in the Graphviz files.

  - Mandatory: NO

  - Default: "node"

GRAPHVIZ_EXECUTABLES

  Set to FALSE to exclude executables from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_STATIC_LIBS

  Set to FALSE to exclude static libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_SHARED_LIBS

  Set to FALSE to exclude shared libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_MODULE_LIBS

  Set to FALSE to exclude module libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_INTERFACE_LIBS

  Set to FALSE to exclude interface libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_OBJECT_LIBS

  Set to FALSE to exclude object libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_UNKNOWN_LIBS

  Set to FALSE to exclude unknown libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_EXTERNAL_LIBS

  Set to FALSE to exclude external libraries from the generated graphs.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_CUSTOM_TARGETS

  Set to TRUE to include custom targets in the generated graphs.

  - Mandatory: NO

  - Default: FALSE

GRAPHVIZ_IGNORE_TARGETS

  A list of regular expressions for names of targets to exclude from the generated graphs.

  - Mandatory: NO

  - Default: empty

GRAPHVIZ_GENERATE_PER_TARGET

  Set to FALSE to not generate per-target graphs `foo.dot.<target>`.

  - Mandatory: NO

  - Default: TRUE

GRAPHVIZ_GENERATE_DEPENDERS

  Set to FALSE to not generate depender graphs `foo.dot.<target>.dependers`.

  - Mandatory: NO

  - Default: TRUE