CMake find_dependency不尊重包文档中的行为?



在有关CMake软件包创建的文档之后,指出:

find_dependency宏还将ClimbingStats_FOUND设置为False(如果未找到依赖项(,以及诊断ClimbingStats包不能在没有Stats包的情况下使用。

然而,我们观察到,只有在没有REQUIRED参数的情况下从下游请求ClimbingStats时才会出现这种情况。

不需要

find_package(ClimbingStats CONFIG)

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

Found package configuration file:
...

但它将ClimbingStats_FOUND设置为FALSE,因此包"ClimbingStats"被认为是未找到的。 套餐给出的原因:

ClimbingStats could not be found because dependency Stats could not be found.

必填

如果我们改为需要ClimbingStats包:

find_package(ClimbingStats CONFIG REQUIRED)

然后错误根本没有提到ClimbingStats

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的文档指出:

find_dependency转发传递给原始find_package()调用的QUIETREQUIRED的正确参数。

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

在您的情况下,确实观察到此行为:错误消息是通过调用生成的

find_package(stats REQUIRED)

并且调用方代码没有机会处理其 FALSE 结果,以使错误消息更具描述性。


有没有办法要求一个包,并且在找不到它的上游时仍然收到描述性错误消息(如第一个示例(?

据我了解,find_dependency更"原生"的行为是不REQUIRED关键字转发到内部find_package,而是手动检查该find_package的结果,如果它是 FALSE,则发出适当的消息。

您可以就此向CMake跟踪器提交功能请求。

最新更新