默认情况下,CMake find_path/find_library是否搜索\u根目录?

默认情况下,CMake find_path/find_library是否搜索\u根目录?,cmake,cmake-modules,Cmake,Cmake Modules,阅读有关CMake政策74- […]现在搜索由_rootcmake变量和ROOT环境变量指定的前缀。包根作为堆栈进行维护,因此对find模块和config包中的所有find*命令的嵌套调用也会将根作为前缀进行搜索 这是否意味着ROOT不需要显式地包含在find*路径中? 这是否意味着将自动检查_ROOT?是的,但这仅适用于CMake 3.12及更高版本,如政策中所述: 在CMake 3.12及更高版本中,find_package命令现在搜索由_rootCMAKE变量和_ROOT环境变量指定的前缀

阅读有关CMake政策74-

[…]现在搜索由_rootcmake变量和ROOT环境变量指定的前缀。包根作为堆栈进行维护,因此对find模块和config包中的所有find*命令的嵌套调用也会将根作为前缀进行搜索

这是否意味着ROOT不需要显式地包含在find*路径中?
这是否意味着将自动检查_ROOT?

是的,但这仅适用于CMake 3.12及更高版本,如政策中所述:

在CMake 3.12及更高版本中,find_package命令现在搜索由_rootCMAKE变量和_ROOT环境变量指定的前缀

这也仅适用于find模块和config包中的find_*命令

所有find_*命令的文档中都明确说明了此行为。例如,以下是以粗体显示的文档重要部分的片段:

如果未指定NO_DEFAULT_PATH,则搜索过程如下:

如果从find模块内调用,或通过调用find_包加载的任何其他脚本,则搜索前缀对于正在查找的当前包是唯一的。具体来说,查看_rootcmake变量和_ROOT环境变量。包根变量作为堆栈进行维护,因此如果从嵌套的查找模块或配置包调用,则父级的查找模块或配置包的根路径将在当前模块或包的路径之后进行搜索。换句话说,搜索顺序将是_ROOT、ENV{u ROOT}、_ROOT、ENV{u ROOT},等等。如果没有传递任何_PACKAGE_ROOT_路径,或者将CMAKE_FIND_USE_PACKAGE_ROOT_路径设置为FALSE,则可以跳过此操作。 另外请注意,如果在没有默认路径或没有包根路径的情况下调用find模块,则_ROOT变量将不会用于搜索