找到外部项目,并加载其设置。
https://blog.csdn.net/zhizhengguan/article/details/111714160
find_package(<PackageName> [version] [EXACT] [QUIET]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[CONFIG|NO_MODULE]
[NO_POLICY_SCOPE]
[NAMES name1 [name2 ...]]
[CONFIGS config1 [config2 ...]]
[HINTS path1 [path2 ... ]]
[PATHS path1 [path2 ... ]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[NO_DEFAULT_PATH]
[NO_PACKAGE_ROOT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_PACKAGE_REGISTRY]
[NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing.
[NO_CMAKE_SYSTEM_PATH]
[NO_CMAKE_SYSTEM_PACKAGE_REGISTRY]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH])
CONFIG选项、同义词NO_MODULE选项或基本签名中未指定的选项的使用都强制采用纯CONFIG模式。在纯粹的Config模式下,命令会跳过模块模式搜索而立即执行Config模式搜索。
配置模式搜索尝试查找由要查找的包提供的配置文件。
CMake在搜索具有适当版本的软件包安装时考虑的所有配置文件都存储在CMake变量< PackageName >_CONSIDERED_CONFIGS中,相关版本存储在< PackageName >_CONSIDERED_VERSIONS.中。
如果无法找到包配置文件,除非指定了QUIET参数,否则CMake将产生描述问题的错误。如果指定了REQUIRED且没有找到包,则会生成致命错误,配置步骤会停止执行。如果< PackageName >_DIR已经被设置为一个不包含配置文件的目录,CMake将忽略它并从头开始搜索。
我们鼓励提供CMake包配置文件的包维护人员对它们进行命名和安装,这样下面列出的Search Procedure就可以在不需要使用其他选项的情况下找到它们。
CMake为包构造一组可能的安装前缀。在每个前缀下搜索配置文件的多个目录。下面的表显示了搜索的目录。每一项都适用于遵循Windows (W)、UNIX (U)或Apple (A)约定的安装树:
<prefix>/ (W)
<prefix>/(cmake|CMake)/ (W)
<prefix>/<name>*/ (W)
<prefix>/<name>*/(cmake|CMake)/ (W)
<prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/ (U)
<prefix>/(lib/<arch>|lib*|share)/<name>*/ (U)
<prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/ (W/U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/ (W/U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (W/U)
在支持macOS框架和BUNDLE的系统上,会在以下目录中搜索包含配置文件的框架或应用包:
<prefix>/<name>.framework/Resources/ (A)
<prefix>/<name>.framework/Resources/CMake/ (A)
<prefix>/<name>.framework/Versions/*/Resources/ (A)
/.framework/Versions/*/ Resources/CMake/ (A)
<prefix>/<name>.app/Contents/Resources/ (A)
<prefix>/<name>.app/Contents/Resources/CMake/ (A)
在所有情况下,< name >被视为不区分大小写,并对应于任何指定的名称(< PackageName >或NAMES 给出的名称)。
如果设置了CMAKE_LIBRARY_ARCHITECTURE变量,那么带有lib/< arch >的路径将被启用。lib*包含一个或多个值lib64、lib32、libx32或Lib(按此顺序搜索)。
如果指定了PATH_SUFFIXES ,则将后缀逐个附加到每个(W)或(U)目录条目。
这组目录旨在与在安装树中提供配置文件的项目协同工作。上面标有(W)的目录用于Windows上的安装,其中前缀可能指向应用程序安装目录的顶部。标记为(U)的用于UNIX平台上的安装,其中前缀由多个包共享。这只是一个约定,所以所有的(W)和(U)目录仍然在所有平台上搜索。标有(A)的目录用于在Apple平台上安装。CMAKE_FIND_FRAMEWORK和CMAKE_FIND_APPBUNDLE变量决定优先次序。
安装前缀集是通过以下步骤构造的。如果指定了NO_DEFAULT_PATH,则启用所有NO_*选项。
3.16新版功能:添加了CMAKE_FIND_USE__PATH变量来全局禁用各种搜索位置。
CMake变量CMAKE_FIND_ROOT_PATH指定一个或多个要添加到所有其他搜索目录的目录。这有效地“重新根”了给定位置下的整个搜索。CMAKE_STAGING_PREFIX的后代路径将被排除在重新生根之外,因为该变量始终是主机系统上的路径。默认情况下,CMAKE_FIND_ROOT_PATH为空。
CMAKE_SYSROOT变量还可以用来指定一个目录作为前缀。设置CMAKE_SYSROOT还有其他效果。有关该变量的更多信息,请参见文档。
当交叉编译指向目标环境的根目录时,这些变量特别有用,CMake也会在那里进行搜索。默认情况下,首先搜索CMAKE_FIND_ROOT_PATH中列出的目录,然后搜索CMAKE_SYSROOT目录,然后搜索非根目录。默认行为可以通过设置CMAKE_FIND_ROOT_PATH_MODE_PACKAGE进行调整。这个行为可以在每次调用的基础上使用选项手动重写:
默认搜索顺序被设计为最特定于最不特定于常见用例。项目可以通过多次调用该命令并使用NO_*选项来覆盖该命令:
find_package (<PackageName> PATHS paths... NO_DEFAULT_PATH)
find_package (<PackageName>)
一旦其中一个调用成功,结果变量将被设置并存储在缓存中,以便不再进行调用搜索。
默认情况下,存储在结果变量中的值将是找到文件的路径。在调用find_package之前,CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS变量可以设置为TRUE,以便解析符号链接并存储文件的真实路径。
每个非必需的find_package调用都可以通过将CMAKE_DISABLE_FIND_PACKAGE_变量设置为TRUE来禁用。
find_package(OpenCV
PATHS /opt/opencv
NO_DEFAULT_PATH
REQUIRED)
if (OpenCV_FOUND)
include_directories(${OpenCV_INCLUDE_DIRS})
message( ${OpenCV_LIBS})
else()
message("OpenCV not found, so we won't build the project.")
endif()