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\bin和C:\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::SSL和OpenSSL::Crypto这两个标准CMake目标,直接链接就行,完全不需要再调用find_package(OpenSSL REQUIRED)——这反而绕了弯路,因为FetchContent已经帮你把依赖的构建和集成全搞定了。
如果因为某些原因一定要用find_package,可以在FetchContent之后手动设置OPENSSL_ROOT_DIR指向构建后的OpenSSL目录,不过这种做法完全没必要,直接用上面的链接方式更简洁。
内容的提问来源于stack exchange,提问作者Lasersköld




