CMake find_依赖项不尊重包文档中的行为?

CMake find_依赖项不尊重包文档中的行为?,cmake,dependencies,Cmake,Dependencies,以下文件说明: 如果未找到依赖项,则find_dependency宏还会将grampingstats_FOUND设置为False,并诊断如果没有Stats包,则无法使用grampingstats包 然而,我们注意到,只有当从下游请求grampingstats而不使用REQUIRED参数时,才会出现这种情况 不需要 然后我们得到上述行为,即: Found package configuration file: ... 但它将grampingstats\u FOUND设置为FALSE,因

以下文件说明:

如果未找到依赖项,则
find_dependency
宏还会将
grampingstats_FOUND
设置为
False
,并诊断如果没有
Stats
包,则无法使用
grampingstats

然而,我们注意到,只有当从下游请求
grampingstats
而不使用
REQUIRED
参数时,才会出现这种情况

不需要 然后我们得到上述行为,即:

Found package configuration file:

    ...
但它将
grampingstats\u FOUND
设置为
FALSE
,因此认为包“grampingstats”未找到。 包中给出的理由:

ClimbingStats could not be found because dependency Stats could not be found.
要求的 如果我们需要
爬升状态
包:

find_package(ClimbingStats CONFIG REQUIRED)
那么错误根本就没有提到攀登状态

Could not find a package configuration file provided by "Stats" with any of
  the following names:

    StatsConfig.cmake
    stats-config.cmake

  Add the installation prefix of "Stats" to CMAKE_PREFIX_PATH or set
  "Stats_DIR" to a directory containing one of the above files.  If "Stats"
  provides a separate development package or SDK, be sure it has been
  installed.

我们是否误解了上面链接的文档,或者这是CMake行为中的错误

有没有一种方法可以要求一个包,但当它的上游没有找到时,仍然会得到描述性错误消息(如第一个示例中所示)

我们是否误解了上面链接的文档,或者这是CMake行为中的错误

看起来像是CMake文档中的错误

各国的文件:

find_dependency
QUIET
REQUIRED
转发正确的参数,这些参数已传递给原始
find_package()
调用

因此,当使用必需关键字调用外部
find_package()
时,也会使用该关键字调用内部
find_package()

在您的案例中可以观察到这种行为:错误消息是通过调用生成的

find_package(stats REQUIRED)
调用方代码没有机会处理错误结果,从而使错误消息更具描述性


有没有一种方法可以要求一个包,但当它的上游没有找到时,仍然会得到描述性错误消息(如第一个示例中所示)

据我所知,
find_dependency
的更多“本机”行为是不将
REQUIRED
关键字转发到内部
find_package
,而是手动检查
find_package
的结果,如果为FALSE,则发出相应的消息

您可以就此向CMake tracker提交功能请求

find_package(stats REQUIRED)