# unexpected "REQUIRED" argument forwarded by \`find\_dependency\`

**URL:** https://discourse.cmake.org/t/unexpected-required-argument-forwarded-by-find-dependency/13395
**Category:** Usage
**Created:** [January 14, 2025, 11:56am UTC](https://discourse.cmake.org/t/unexpected-required-argument-forwarded-by-find-dependency/13395 "2025-01-14T11:56:44Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![adaldev](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/a/9dc877/32.png) [@adaldev](https://discourse.cmake.org/u/adaldev)
#### Post date: [January 14, 2025, 11:56am UTC](https://discourse.cmake.org/t/unexpected-required-argument-forwarded-by-find-dependency/13395/1 "2025-01-14T11:56:44Z")

</div>

This question is related to [this one](https://discourse.cmake.org/t/issue-with-dependencies-propagation-when-different-versions-are-present/10429/2).

I decided to track what happened exactly when resolving a dependency chain.

I set 3 projects `A`, `B` and `C`.  
`B` depends privately on `C` and does `find_package(C <REQUIRED>)`.  
`A` depends privately on `B` and does `find_package(B REQUIRED)`.

All of them are using the following trivial macro:

```cmake
macro(find_package)
	message("@DEBUG@ in find_packages(${ARGV})")
	_find_package(${ARGV})
endmacro()

```

all package are installed with a configuration file containing:

```cmake
include(CMakeFindDependencyMacro)
foreach(_lib_ IN ITEMS @MY_REQUIRED_DEPENDENCIES@)
	find_dependency(${_lib_})
endforeach()

```

where `MY_REQUIRED_DEPENDENCIES` is a list of project names (namely `B` or `C` in this case).

First situation, `C` is required by `B`, I’ve got for `B`:

> @DEBUG@ in find\_packages(C;REQUIRED)

and for `A`

> @DEBUG@ in find\_packages(B;REQUIRED)  
> @DEBUG@ in find\_packages(C;REQUIRED)

as expected  
Second situation, `C` is NOT required by `B`, I’ve got for `B`:

> @DEBUG@ in find\_packages(C)

and for `A`

> @DEBUG@ in find\_packages(B;REQUIRED)  
> @DEBUG@ in find\_packages(C;REQUIRED)

Which is unexpected. I thought I should get:

> @DEBUG@ in find\_packages(B;REQUIRED)  
> @DEBUG@ in find\_packages(C)

What did I got wrong?

---

<div class="post-metadata">

### Author: ![Angew](https://discourse.cmake.org/user_avatar/discourse.cmake.org/angew/32/229_2.png) [@Angew](https://discourse.cmake.org/u/Angew)
#### Post date: [January 14, 2025, 12:49pm UTC](https://discourse.cmake.org/t/unexpected-required-argument-forwarded-by-find-dependency/13395/2 "2025-01-14T12:49:32Z")

</div>

That is documented behaviour of `find_dependency()`. Quoting the [docs](https://cmake.org/cmake/help/latest/module/CMakeFindDependencyMacro.html):

> It is designed to be used in a [Package Configuration File](https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#config-file-packages) (`<PackageName>Config.cmake`). `find_dependency` forwards the correct parameters for `QUIET` and `REQUIRED` which were passed to the original [`find_package()`](https://cmake.org/cmake/help/latest/command/find_package.html#command:find_package) call.

---

<div class="post-metadata">

### Author: ![adaldev](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/a/9dc877/32.png) [@adaldev](https://discourse.cmake.org/u/adaldev)
#### Post date: [January 14, 2025, 1:59pm UTC](https://discourse.cmake.org/t/unexpected-required-argument-forwarded-by-find-dependency/13395/3 "2025-01-14T13:59:34Z")

</div>

Does it mean that if B is required, its dependencies, even optional ones, are getting required now?  
It’s not suitable when the dependency between B and C is private, isn’t it?  
So is there a way to keep the optional nature of a dependency?
