CMake 的 `find_package` 设置的保证变量?

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

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

find_package(<PackageName>_FOUND)
中运行
CMakeLists.txt
,则包维护者可以决定如何命名 结果变量。还有人声称保证是
<PackageName>_FOUND

还有其他常用的变量,如

<PackageName>_INCLUDE_DIRS
<PackageName>_LIBRARIES

按照我对文档的理解,似乎

<PackageName>_FOUND
确实是严格执行和强制性的,而偏离其他变量是可能的。但我不太确定,写得有点含糊。

那么

find_package
可以设置什么?

显然对于某些包,某些变量可能没有意义(例如

<PackageName>_LIBRARIES
对于仅标头库)。但这是例如吗?由 CMake 强制执行(在为包编写
Find<PackageName>.cmake
文件时),if 根本有库文件,则必须设置
<PackageName>_LIBRARIES
?或者这只是一个建议,如果是这样,软件包维护者真的会偏离它吗?

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.