如何在 cmake 中使用 find_package?

问题描述

使用时

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 为您编写的模块。所以当然不知道去哪里找。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...