问题描述
使用时
find_package(OpenSSL MODULE required)
我得到以下输出
-- Found OpenSSL: /usr/local/lib/libcrypto.so (found version "2.0.0")
但是当我使用
find_package(OpenSSL required PATHS /usr/local/lib/libcrypto.so)
Could not find a package configuration file provided by "OpenSSL" with any of the following names: OpenSSLConfig.cmake openssl-config.cmake
谁能解释为什么会发生这种情况,也是在配置模式下使用 find_package 的正确方式。
解决方法
您实际上使用了 2 种不同的行为。
# This way is using Basic Signature and Module Mode
# https://cmake.org/cmake/help/latest/command/find_package.html?highlight=find_package#basic-signature-and-module-mode
find_package(OpenSSL MODULE REQUIRED)
" 该命令有两种搜索包的模式:“模块”模式和“配置”模式。上面的签名选择Module模式。如果未找到模块,则该命令将退回到配置模式,如下所述。如果提供 MODULE 选项,则禁用此回退。
在模块模式下,CMake 搜索名为 Find.cmake 的文件。该文件首先在 CMAKE_MODULE_PATH 中搜索,然后在 CMake 安装提供的 Find Modules 中搜索。如果找到该文件,则由 CMake 读取并处理该文件。它负责查找包、检查版本并生成任何需要的消息。一些 find-modules 提供有限的或不支持版本控制;检查模块文档。 "
所以基本上在第一个中您使用的是 FindOpenSLL cmake 模块。 "https://cmake.org/cmake/help/latest/module/FindOpenSSL.html?highlight=openssl"
在第二个中,您说不要使用 CMake 为您编写的模块。所以当然不知道去哪里找。