<PackageName>_FOUND 变量是否始终由 CMake 的 find_package 设置? [重复]

问题描述 投票:0回答:1

我听说有些人声称,如果您在

find_package(<PackageName>_FOUND)
中运行
CMakeLists.txt
,那么(就像
<PackageName>_INCLUDE_DIRS
一样)包维护者可以决定 结果变量 的命名方式。 其他人声称保证是
<PackageName>_FOUND

文档中我们读到:

查找模块的主要任务是确定包是否可用,设置 _FOUND 变量来反映这一点,并提供使用该包所需的任何变量、宏和导入的目标。在上游库不提供配置文件包的情况下,查找模块非常有用。

所以这听起来很像

<PackageName>_FOUND
肯定是由 find 模块本身设置的,总是并且不依赖于Find<PackageName>.cmake
文件。

由于人们在这一点上仍然自相矛盾,所以我对某人对此事的单纯看法不感兴趣,而是对权威答案或证明这一点的例子感兴趣。

cmake find-package
1个回答
0
投票
事实上,没有什么是可以保证的,因为 find_package 所做的唯一事情就是查找并包含/处理 CMake 配置文件。该文件(通常生成)的作者需要确保它正确设置必要的变量以便可以使用它们。任何永远不会使用的变量都不需要设置。

CMake 并不是某种确保正确生成所有包的权威,这只是一个标准,说明如何命名变量以与其他 CMake 功能兼容。如果您不遵守它,您将需要处理由此产生的任何问题,但如果您认为自己知道自己在做什么,则不必这样做。

Find<PackageName>.cmake

的一个常见组件是
find_package_handle_standard_args()
source),它负责设置<PackageName>_FOUND
变量。因此您不必直接自行设置。如果你什么都不做,它就会丢失,这可能会在以后造成麻烦,但没关系。

简而言之,答案是:没有什么是真正需要的。您的

Find<PackageName>.cmake

 可能实际上是空的。没什么用处,但只要它在 
CMAKE_MODULE_PATH
 上就不会导致错误。

当然,感谢所有辅助函数和生成器,不设置基本变量实际上是相当困难的。

© www.soinside.com 2019 - 2024. All rights reserved.