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。

组件

此模块支持以下可选组件

Crypto

3.12 版本新增。

确保找到 OpenSSL crypto 库。

SSL

3.12 版本新增。

确保找到 OpenSSL ssl 库。

可以使用标准语法选择性地指定组件

find_package(OpenSSL [COMPONENTS <components>...])

如果未请求任何组件,则模块默认搜索 Crypto 作为必需组件,SSL 作为可选组件。

导入的目标

此模块提供以下 导入目标

OpenSSL::Crypto

3.4 版本新增。

封装 OpenSSL crypto 库使用需求的 Target,仅当找到 crypto 库时可用。

OpenSSL::SSL

3.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_SOURCES Target 属性添加。由于 CMake 中接口源的传播方式,建议将 OpenSSL::applink Target 链接为 PRIVATE,以确保它在任何库或可执行文件的整个依赖图中仅链接一次。

target_link_libraries(project_target PRIVATE OpenSSL::applink)

此 Target 使用其他范围可能会导致构建或链接过程中出现意外问题,因为 ISO C 和 ISO C++ 标准都对链接行为的要求很少。

结果变量

此模块定义了以下变量

OpenSSL_FOUND

3.3 版本中新增。

布尔值,指示是否找到(所请求版本的)OpenSSL 库。

OpenSSL_VERSION

版本 4.2 中添加。

找到的 OpenSSL 版本。此变量设置为 <major>.<minor>.<revision><patch>(例如,0.9.8s)。

OPENSSL_INCLUDE_DIR

OpenSSL 的 include 目录。

OPENSSL_CRYPTO_LIBRARY

OpenSSL crypto 库。

OPENSSL_CRYPTO_LIBRARIES

OpenSSL crypto 库及其依赖项。

OPENSSL_SSL_LIBRARY

OpenSSL ssl 库。

OPENSSL_SSL_LIBRARIES

OpenSSL ssl 库及其依赖项。

OPENSSL_LIBRARIES

所有 OpenSSL 库及其依赖项。

OPENSSL_APPLINK_SOURCE

上面提到的 Target OpenSSL::applink 中的源文件。仅当找到的 OpenSSL 版本至少为 0.9.8 且平台为 MSVC 时,此变量才会被定义。

提示

此模块接受以下变量来控制搜索行为

OPENSSL_ROOT_DIR

设置为 OpenSSL 安装的根目录,以便在自定义位置搜索 OpenSSL 库。

OPENSSL_USE_STATIC_LIBS

3.4 版本新增。

设置为 TRUE 以优先使用静态 OpenSSL 库而非共享库。

OPENSSL_MSVC_STATIC_RT

3.5 版本新增。

设置为 TRUE 以搜索使用 MSVC 静态运行时 (MT) 构建的 OpenSSL 库。

ENV{PKG_CONFIG_PATH}

在类 UNIX 系统上,使用 pkg-config 来定位 OpenSSL。设置 PKG_CONFIG_PATH 环境变量以指定备用位置,这在具有多个库安装的系统上很有用。

已弃用变量

以下变量提供用于向后兼容性

OPENSSL_FOUND

Deprecated since version 4.2: 使用 OpenSSL_FOUND,其值相同。

布尔值,指示是否找到(所请求版本的)OpenSSL 库。

OPENSSL_VERSION

Deprecated since version 4.2: OpenSSL_VERSION 取代。

找到的 OpenSSL 版本。

示例

查找 OpenSSL crypto 库并将其链接到项目 Target

find_package(OpenSSL)
target_link_libraries(project_target PRIVATE OpenSSL::Crypto)

以下示例展示了如何查找 OpenSSL cryptossl 库并将它们链接到项目 Target。显式指定 SSL 组件以确保在找不到 ssl 库时,查找模块会报告错误。

find_package(OpenSSL COMPONENTS SSL)
target_link_libraries(project_target PRIVATE OpenSSL::SSL)