Как исправить Conan CMake "Could NOT find OpenSSL"

Проблема:

При сборке вашего пакета conan вы видите эту ошибку CMake:

cmake_findopenssl_error.txt
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (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):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindOpenSSL.cmake:447 (find_package_handle_standard_args)
  ../_deps/curl-src/CMakeLists.txt:365 (find_package)

хотя ваш conanfile.py объявляет OpenSSL как зависимость:

conanfile.py
class MyPackageConan(ConanFile):
  # ...
  requires = ("openssl/1.1.1l", )

Решение

Убедитесь, что CMakeLists.txt проекта содержит эти строки:

CMakeLists_conan_setup.cmake
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

Обычно способ сделать это — использовать этот код, который автоматически генерируется conan new:

conan_source_replace.py
  # This small hack might be useful to guarantee proper /MT /MD linkage
  # in MSVC if the packaged project doesn't have variables to set it
  # properly
  tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
            '''PROJECT(HelloWorld)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()''')

в source() следующим образом:

conan_source.py
  def source(self):
    self.run("git clone https://github.com/conan-io/hello.git")
    # This small hack might be useful to guarantee proper /MT /MD linkage
    # in MSVC if the packaged project doesn't have variables to set it
    # properly
    tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
                '''PROJECT(HelloWorld)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()''')

Обратите внимание, что вам нужно заменить оба hello/CMakeLists.txt на правильное имя файла (обычно просто замените hello на). Также вам нужно заменить оба экземпляра PROJECT(HelloWorld) на фактическую строку из вашего CMakeLists.txt, чтобы команда замены сработала.


Check out similar posts by category: C/C++ CMake Conan