在有关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()
调用的QUIET
和REQUIRED
的正确参数。
因此,当使用 REQUIRED 关键字调用外部find_package()
时,也会使用该关键字调用内部find_package()
。
在您的情况下,确实观察到此行为:错误消息是通过调用生成的
find_package(stats REQUIRED)
并且调用方代码没有机会处理其 FALSE 结果,以使错误消息更具描述性。
有没有办法要求一个包,并且在找不到它的上游时仍然收到描述性错误消息(如第一个示例(?
据我了解,find_dependency
更"原生"的行为是不REQUIRED
关键字转发到内部find_package
,而是手动检查该find_package
的结果,如果它是 FALSE,则发出适当的消息。
您可以就此向CMake跟踪器提交功能请求。