是的,但这仅适用于 CMake 3.12 及更高版本,如政策文档中所述:
在 CMake 3.12 及更高版本中,该find_package(<PackageName>)
命令现在搜索由<PackageName>_ROOT
CMake 变量和<PackageName>_ROOT
环境变量指定的前缀。
这也仅适用find_*
于查找模块和配置包中的命令。
此行为在所有find_*
命令的文档中都有明确说明。例如,这是find_library()
文档中的一个片段(重要部分以粗体显示):
如果NO_DEFAULT_PATH
不指定,则搜索过程如下:
- 如果从 find 模块或通过调用加载的任何其他脚本中调用
find_package(<PackageName>)
,则搜索当前找到的包所特有的前缀。具体来说,查看<PackageName>_ROOT
CMake 变量和<PackageName>_ROOT
环境变量。包根变量作为堆栈维护,因此如果从嵌套的查找模块或配置包中调用,则将在当前模块或包的路径之后搜索父级查找模块或配置包的根路径。换句话说,搜索顺序将是<CurrentPackage>_ROOT
, ENV{<CurrentPackage>_ROOT}
, <ParentPackage>_ROOT
,等。如果通过或通过设置toENV{<ParentPackage>_ROOT}
可以跳过这一步。NO_PACKAGE_ROOT_PATH
CMAKE_FIND_USE_PACKAGE_ROOT_PATH
FALSE
另请注意,如果使用or调用 find 模块,则该<PackageName>_ROOT
变量将不会用于搜索。NO_DEFAULT_PATH
NO_PACKAGE_ROOT_PATH