# CMakeFindDependencyMacro

This module provides a command implemented as a macro that finds dependency for a package.

Load this module in a CMake package configuration file with:

`FooConfig.cmake` or `foo-config.cmake`:

    include(CMakeFindDependencyMacro)

Note

This module is designed to be used in a Package Configuration File (`<PackageName>Config.cmake`).

## Commands

This module provides the following command:

find_dependency

  The `find_dependency()` macro wraps a `find_package()` call for a package dependency:

      find_dependency(<dep> [...])

  It is designed to be used in a Package Configuration File (`<PackageName>Config.cmake`). `find_dependency` forwards the correct parameters for `QUIET` and `REQUIRED` which were passed to the original `find_package()` call. Any additional arguments specified are forwarded to `find_package()`.

  If the dependency could not be found it sets an informative diagnostic message and calls `return()` to end processing of the calling package configuration file and return to the `find_package()` command that loaded it.

  Note

  The call to `return()` makes this macro unsuitable to call from Find Modules.

## Package Dependency Search Optimizations

If `find_dependency` is called with arguments identical to a previous call in the same directory, perhaps due to diamond-shaped package dependencies, the underlying call to `find_package()` is optimized out. This optimization is important to support large package dependency graphs while avoiding a combinatorial explosion of repeated searches. However, the heuristic cannot account for ambient variables that affect package behavior, such as `<PackageName>_USE_STATIC_LIBS`, offered by some packages. Therefore package configuration files should avoid setting such variables before their calls to `find_dependency`.

Changed in version 3.15: Previously, the underlying call to `find_package()` was always optimized out if the package had already been found. CMake 3.15 removed the optimization to support cases in which `find_dependency` call arguments request different components.

Changed in version 3.26: The pre-3.15 optimization was restored, but with the above-described heuristic to account for varying `find_dependency` call arguments.