You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows系统下CMake项目链接OpenSSL的配置方法及源码集成方案

我完全懂你这种头疼的感觉——在Windows上折腾OpenSSL和CMake的适配确实容易卡壳。你想要的源码集成+自动拉取的方案完全可行,下面给你一步步拆解:

核心方案:用CMake的FetchContent直接拉取并构建OpenSSL

新版OpenSSL(3.x及以上)已经官方支持CMake构建,完全可以通过FetchContent自动下载源码、编译,并且直接导出可链接的目标,不需要手动安装任何东西,完美解决后续开发者的环境问题。

完整CMake代码示例

把这段代码加到你的项目根目录的CMakeLists.txt里(注意替换成你的项目名称):

# 启用FetchContent模块,用于自动拉取依赖源码
include(FetchContent)

# 配置要拉取的OpenSSL版本,这里选3.0.10(稳定版),你可以换成最新的标签
FetchContent_Declare(
  openssl
  GIT_REPOSITORY https://github.com/openssl/openssl.git
  GIT_TAG openssl-3.0.10  # 建议用稳定版标签,避免分支更新带来的兼容性问题
)

# 让CMake自动完成下载、配置、编译OpenSSL的流程
FetchContent_MakeAvailable(openssl)

# 链接OpenSSL到你的项目——直接用官方导出的目标即可
target_link_libraries(你的项目名称 PRIVATE OpenSSL::SSL OpenSSL::Crypto)

注意事项(Windows环境必看)

OpenSSL编译依赖两个工具:Perl和NASM,Windows上默认没有,你需要先安装它们:

  • 最简单的方式是用Chocolatey包管理器:打开管理员PowerShell,执行choco install perl nasm
  • 也可以从官网手动下载安装,然后把它们的安装路径加到系统PATH环境变量里(比如C:\Perl\binC:\Program Files\nasm

如果需要用旧版OpenSSL(比如1.1.1系列)

旧版OpenSSL没有官方CMake脚本,这时候可以用第三方维护的带CMake支持的仓库,只需要修改FetchContent的仓库地址和标签:

FetchContent_Declare(
  openssl
  GIT_REPOSITORY https://github.com/openssl/openssl-cmake.git
  GIT_TAG 1.1.1w  # 对应OpenSSL 1.1.1w版本
)

为什么不用find_package?

其实用FetchContent构建完成后,OpenSSL已经导出了OpenSSL::SSLOpenSSL::Crypto这两个标准CMake目标,直接链接就行,完全不需要再调用find_package(OpenSSL REQUIRED)——这反而绕了弯路,因为FetchContent已经帮你把依赖的构建和集成全搞定了。

如果因为某些原因一定要用find_package,可以在FetchContent之后手动设置OPENSSL_ROOT_DIR指向构建后的OpenSSL目录,不过这种做法完全没必要,直接用上面的链接方式更简洁。

内容的提问来源于stack exchange,提问作者Lasersköld

火山引擎 最新活动