使用 cmake 时 find_package(<package>) 函数的默认搜索路径是什么?

har*_*man 2 cmake

我还想知道在 Linux (Ubuntu) 中find_package(<package>)查找时设置的默认变量<package>

Flo*_*ian 7

把我的评论变成答案

如果您必须将其分解为“最重要的单一”路径,它将是包含预装模块的 CMake 自己的模块路径Find...

将 CMake 指向自定义路径的最重要的全局变量变量是CMAKE_MODULE_PATH.

如果您想查看 CMake 在您的情况下搜索哪些目录,只需调用

 cmake -D CMAKE_FIND_DEBUG_MODE=ON ..
Run Code Online (Sandbox Code Playgroud)

整个“搜索算法”记录在find_package()命令文档中

  1. 在特定于 cmake 的缓存变量中指定的搜索路径。如果NO_CMAKE_PATH通过,则可以跳过此步骤:

    CMAKE_PREFIX_PATH
    CMAKE_FRAMEWORK_PATH
    CMAKE_APPBUNDLE_PATH
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在特定于 cmake 的环境变量中指定的搜索路径。如果NO_CMAKE_ENVIRONMENT_PATH通过,则可以跳过此步骤:

    <package>_DIR
    CMAKE_PREFIX_PATH
    CMAKE_FRAMEWORK_PATH
    CMAKE_APPBUNDLE_PATH
    
    Run Code Online (Sandbox Code Playgroud)
  3. HINTS选项指定的搜索路径。应该使用PATHS选项指定硬编码的猜测。

  4. 搜索标准系统环境变量。如果NO_SYSTEM_ENVIRONMENT_PATH通过,则可以跳过此步骤:

    PATH
    
    Run Code Online (Sandbox Code Playgroud)
  5. 存储在 CMake 用户包注册表中的搜索路径。如果NO_CMAKE_PACKAGE_REGISTRY通过或将 设置为CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY,则可以跳过此步骤TRUE

  6. 搜索在当前系统的平台文件中定义的 cmake 变量。如果NO_CMAKE_SYSTEM_PATH通过,则可以跳过此步骤:

    CMAKE_SYSTEM_PREFIX_PATH
    CMAKE_SYSTEM_FRAMEWORK_PATH
    CMAKE_SYSTEM_APPBUNDLE_PATH
    
    Run Code Online (Sandbox Code Playgroud)
  7. 存储在 CMake 系统包注册表中的搜索路径。如果NO_CMAKE_SYSTEM_PACKAGE_REGISTRY通过或将 设置为CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY,则可以跳过此步骤TRUE

  8. PATHS选项指定的搜索路径。这些通常是硬编码的猜测。