FindOpenSSL¶
查找已安装的 OpenSSL 加密库并确定其版本
find_package(OpenSSL [<version>] [COMPONENTS <components>...] [...])
Added in version 3.20: 在调用 find_package() 命令时,支持指定版本范围。当请求版本时,可以像以前一样指定单个值,现在也可以使用版本范围。有关版本范围使用和功能的详细说明,请参阅 find_package() 命令。
Added in version 3.18: 支持 OpenSSL 3.0。
组件¶
此模块支持以下可选组件
Crypto3.12 版本新增。
确保找到 OpenSSL
crypto库。SSL3.12 版本新增。
确保找到 OpenSSL
ssl库。
可以使用标准语法选择性地指定组件
find_package(OpenSSL [COMPONENTS <components>...])
如果未请求任何组件,则模块默认搜索 Crypto 作为必需组件,SSL 作为可选组件。
导入的目标¶
此模块提供以下 导入目标
OpenSSL::Crypto3.4 版本新增。
封装 OpenSSL
crypto库使用需求的 Target,仅当找到crypto库时可用。OpenSSL::SSL3.4 版本新增。
封装 OpenSSL
ssl库使用需求的 Target,仅当找到ssl库时可用。为了方便起见,此 Target 还链接了OpenSSL::Crypto,因为ssl库依赖于crypto库。OpenSSL::applink在 3.18 版本中新增。
封装 OpenSSL 应用程序端接口 (
openssl/applink.c) 使用需求的 Target,仅当找到 OpenSSL 且其版本至少为 0.9.8 时可用。此接口提供 OpenSSL BIO 层和 Windows 编译器运行时环境之间的粘合,在使用 MSVC 时可能需要将其编译到项目中。通过链接此 Target,即使项目使用不同的 MSVC 运行时配置,也可以链接其他 OpenSSL 导入 Target。在 MSVC 以外的平台上链接此 Target 无效。
注意
接口文件使用
INTERFACE_SOURCESTarget 属性添加。由于 CMake 中接口源的传播方式,建议将OpenSSL::applinkTarget 链接为 PRIVATE,以确保它在任何库或可执行文件的整个依赖图中仅链接一次。target_link_libraries(project_target PRIVATE OpenSSL::applink)
此 Target 使用其他范围可能会导致构建或链接过程中出现意外问题,因为 ISO C 和 ISO C++ 标准都对链接行为的要求很少。
结果变量¶
此模块定义了以下变量
OpenSSL_FOUND3.3 版本中新增。
布尔值,指示是否找到(所请求版本的)OpenSSL 库。
OpenSSL_VERSION版本 4.2 中添加。
找到的 OpenSSL 版本。此变量设置为
<major>.<minor>.<revision><patch>(例如,0.9.8s)。OPENSSL_INCLUDE_DIROpenSSL 的 include 目录。
OPENSSL_CRYPTO_LIBRARYOpenSSL
crypto库。OPENSSL_CRYPTO_LIBRARIESOpenSSL
crypto库及其依赖项。OPENSSL_SSL_LIBRARYOpenSSL
ssl库。OPENSSL_SSL_LIBRARIESOpenSSL
ssl库及其依赖项。OPENSSL_LIBRARIES所有 OpenSSL 库及其依赖项。
OPENSSL_APPLINK_SOURCE上面提到的 Target
OpenSSL::applink中的源文件。仅当找到的 OpenSSL 版本至少为 0.9.8 且平台为 MSVC 时,此变量才会被定义。
提示¶
此模块接受以下变量来控制搜索行为
OPENSSL_ROOT_DIR设置为 OpenSSL 安装的根目录,以便在自定义位置搜索 OpenSSL 库。
OPENSSL_USE_STATIC_LIBS3.4 版本新增。
设置为
TRUE以优先使用静态 OpenSSL 库而非共享库。OPENSSL_MSVC_STATIC_RT3.5 版本新增。
设置为
TRUE以搜索使用 MSVC 静态运行时 (MT) 构建的 OpenSSL 库。ENV{PKG_CONFIG_PATH}在类 UNIX 系统上,使用
pkg-config来定位 OpenSSL。设置PKG_CONFIG_PATH环境变量以指定备用位置,这在具有多个库安装的系统上很有用。
已弃用变量¶
以下变量提供用于向后兼容性
OPENSSL_FOUNDDeprecated since version 4.2: 使用
OpenSSL_FOUND,其值相同。布尔值,指示是否找到(所请求版本的)OpenSSL 库。
OPENSSL_VERSIONDeprecated since version 4.2: 由
OpenSSL_VERSION取代。找到的 OpenSSL 版本。
示例¶
查找 OpenSSL crypto 库并将其链接到项目 Target
find_package(OpenSSL)
target_link_libraries(project_target PRIVATE OpenSSL::Crypto)
以下示例展示了如何查找 OpenSSL crypto 和 ssl 库并将它们链接到项目 Target。显式指定 SSL 组件以确保在找不到 ssl 库时,查找模块会报告错误。
find_package(OpenSSL COMPONENTS SSL)
target_link_libraries(project_target PRIVATE OpenSSL::SSL)