win10使用cmake编译libevent(解决依赖openssl)

概述

  • win10没有安装openssl
  • cmake version: 3.18
  • libevent version: 2.1.10-stable
  • libevent目前的版本中写好了 CMakeLists.txt, 如果有兴趣, 可以自己配置一个更加简明的配置文件
  • 本文将介绍两种方式编译libevent: A、不依赖openssl, B、依赖openssl

先介绍不依赖openssl

先介绍不依赖openssl

先介绍不依赖openssl

附 cmake生成解决方案的截图

cmake提示没有安装openssl

cmake配置

提示信息


可能看不清楚? 提示错误如下:

CMake Error at C:/xxxxx/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/xxxxx/cmake_64/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:458 (_FPHSA_FAILURE_MESSAGE)
  C:/xxxxx/cmake_64/share/cmake-3.18/Modules/FindOpenSSL.cmake:486 (find_package_handle_standard_args)
  CMakeLists.txt:811 (find_package)


Configuring incomplete, errors occurred!

结果很明显,Configuring incomplete已经提示,配置失败了。 从提示中的CMakeLists.txt:811 (find_package)可知,最近依次执行到配置文件的811行。

敲黑板, 下面开始改进配置文件

打开libevent目录

找到 CMakeLists.txt文件

就是它,打开它,记事本或者其他工具打开,找到上报错中提示的811行。

811行前后代码如下

if(EVENT__HAVE_EVENT_PORTS)
    list(APPEND SRC_CORE evport.c)
endif()

if (NOT EVENT__DISABLE_OPENSSL)
    find_package(OpenSSL REQUIRED)

    set(EVENT__HAVE_OPENSSL 1)

    message(STATUS "OpenSSL include: ${OPENSSL_INCLUDE_DIR}")
    message(STATUS "OpenSSL lib: ${OPENSSL_LIBRARIES}")
.....

可以知道,调用find_package(OpenSSL REQUIRED)出现错误,再仔细看下这个条件下执行的都是关于openssl的代码,既然没有安装openssl, 那么我们就将它跳过。
if 中的条件 NOT EVENT__DISABLE_OPENSSL, 当条件为 FALSE 就可以跳过了, 所以,只需要将 EVENT__DISABLE_OPENSSL 改为 ON即可。

修改EVENT__DISABLE_OPENSSL

全文搜索,从上到下找到EVENT__DISABLE_OPENSSL, 将其改为ON

代码

option(EVENT__DISABLE_OPENSSL
    "Define if libevent should build without support for OpenSSL encryption" ON)

回到cmake

回到cmake,将cache清空,重新配置, 并config

configure结果

关于

modern cmake 已经爱不释手了

依赖openssl

依赖openssl

依赖openssl

下载地址

  • 这里 可以下载 已经编译好的 openssl的安装包(EXE+MSI),包括32和64位
  • 下载太慢? 我把它下载好,存放在这里,解决下载慢。
  • 注意,它虽然编译好了,但是有 系统要求的,如下:
  • openssl版本:v1.1.1
  • 它有light和非light区分,全部下载好,自行选择,从这里校对 HASH
  • 先安装openssl,再配置系统环境变量系统环境变量,系统环境变量
  • libevent version: 2.1.10-stable
  • cmake version: 3.18
  • win os version: 20H2
  • 本文将介绍一种依赖openssl编译libevent的方法

openssl 安装注意

一定要记住openssl安装后的目录,比如: C:\soft\install\openssl, 待会儿配置环境变量需要这个目录

配置环境变量

上文可知,缺少openssl后,cmake提示缺少系统环境变量

CMake Error at C:/xxxxx/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR)

OPENSSL_ROOT_DIROPENSSL_CRYPTO_LIBRARYOPENSSL_INCLUDE_DIR 都是缺少的。那我们就加上。

name value
OPENSSL_ROOT_DIR C:\soft\install\openssl
OPENSSL_CRYPTO_LIBRARY C:\soft\install\openssl\lib
OPENSSL_INCLUDE_DIR C:\soft\install\openssl\include

我的环境变量配置

敲黑板,配置完环境变量,一定要重启PC

敲黑板,配置完环境变量,一定要重启PC

敲黑板,配置完环境变量,一定要重启PC

配置cmake

1.CMakeLists.txt配置

解压libevent的源码后,如果参考不依赖openssl,将EVENT__DISABLE_OPENSSL改为ON, 那么现在需要你改为OFF,恢复为默认。

2.cmake gui配置生成

选择合适的版本(32?64?)和编译器, configure.

3.附 cmake生成的解决方案

posted @ 2021-01-03 23:18  mohist  阅读(9022)  评论(2编辑  收藏  举报