1. 程式人生 > 實用技巧 >win10使用cmake編譯libevent(解決依賴openssl)

win10使用cmake編譯libevent(解決依賴openssl)

概述

  • win10沒有安裝openssl
  • cmake version: 3.18
  • libevent version: 2.1.10-stable
  • libevent目前的版本中寫好了 CMakeLists.txt, 如果有興趣, 可以自己配置一個更加簡明的配置檔案

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 已經愛不釋手了