如何修复 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
# 这个小技巧可能有助于保证正确的 /MT /MD 链接
# 在 MSVC 中,如果打包的项目没有变量来设置它
# 则可能有用
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")
# 这个小技巧可能有助于保证正确的 /MT /MD 链接
# 在 MSVC 中,如果打包的项目没有变量来设置它
# 则可能有用
tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
'''PROJECT(HelloWorld)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()''')注意你需要用正确的文件名替换 hello/CMakeLists.txt(通常只需将 hello 替换为)。此外,你需要用 CMakeLists.txt 中的实际行替换两个 PROJECT(HelloWorld) 实例,以便替换命令工作。
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow