# 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

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