iis服务器助手广告
返回顶部
首页 > 资讯 > 服务器 >CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
  • 351
分享到

CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法

linuxbash服务器开发语言c++ 2023-08-31 12:08:15 351人浏览 薄情痞子
摘要

FindPackageHandleStandardArgs 前言FindPackageHandleStandardArgs命令命令原型options 用法和示例 FindPackageHa

FindPackageHandleStandardArgs


前言

FindPackageHandleStandardArgs.cmake 是 CMake 内置的一个模块,它用于定义一个宏,可以用于在找到一个包之后,对其进行一些标准化的处理,它通常用于在CMake中查找和配置外部库或工具包。
find_package_handle_standard_args并不会去特定的路径查找文件,它只是一个CMake宏,用于在CMake中处理和验证找到的包。
实际上,find_package_handle_standard_args通常是在find_package命令中调用的。find_package命令会去指定的路径查找包的配置文件,在找到文件后,它会调用find_package_handle_standard_args来处理和验证找到的包。
在CMake中,每个包都有一个配置文件,用于描述包的信息和依赖项。这些配置文件通常位于预定义的路径下,例如CMAKE_MODULE_PATH或CMAKE_PREFIX_PATH,也可以在find_package命令中通过指定PATHS参数来指定包的路径。
当find_package命令找到包的配置文件时,它会将配置文件中定义的变量和选项导入到CMake中,并调用find_package_handle_standard_args来处理和验证找到的包。因此,find_package_handle_standard_args并不是用来查找包的工具,它只是用来处理和验证找到的包的工具。


FindPackageHandleStandardArgs命令

该命令处理Find_Package()的必需参数、安静参数和与版本相关的参数。它还设置_FOUND变量。如果列出的所有变量都包含有效结果,例如有效的文件路径,则认为找到了该程序包。


命令原型

find_package_handle_standard_args(<PackageName> (DEFAULT_MSG|<custom-failure-message>) <required-var>...)find_package_handle_standard_args(<PackageName> [FOUND_VAR <result-var>] [REQUIRED_VARS <required-var>...] [VERSION_VAR <version-var>] [HANDLE_VERSION_RANGE] [HANDLE_COMPONENTS] [CONFIG_MODE] [NAME_MISMATCHED] [REASON_FAILURE_MESSAGE <reason-failure-message>] [FAIL_MESSAGE <custom-failure-message>] )
  • options

(DEFAULT_MSG|<custom-failure-message>)In the simple signature this specifies the failure message. Use DEFAULT_MSG to ask for a default message to be computed (recommended). Not valid in the full signature.FOUND_VAR <result-var>Deprecated since version 3.3.Specifies either <PackageName>_FOUND or <PACKAGENAME>_FOUND as the result variable. This exists only for compatibility with older versions of CMake and is now ignored. Result variables of both names are always set for compatibility.REQUIRED_VARS <required-var>...Specify the variables which are required for this package. These may be named in the generated failure message asking the user to set the missing variable values. Therefore these should typically be cache entries such as FOO_LIBRARY and not output variables like FOO_LIBRARIES.Changed in version 3.18: If HANDLE_COMPONENTS is specified, this option can be omitted.VERSION_VAR <version-var>Specify the name of a variable that holds the version of the package that has been found. This version will be checked against the (potentially) specified required version given to the find_package() call, including its EXACT option. The default messages include infORMation about the required version and the version which has been actually found, both if the version is ok or not.HANDLE_VERSION_RANGENew in version 3.19.Enable handling of a version range, if one is specified. Without this option, a developer warning will be displayed if a version range is specified.HANDLE_COMPONENTSEnable handling of package components. In this case, the command will report which components have been found and which are missing, and the <PackageName>_FOUND variable will be set to FALSE if any of the required components (i.e. not the ones listed after the OPTIONAL_COMPONENTS option of find_package()) are missing.CONFIG_MODESpecify that the calling find module is a wrapper around a call to find_package(<PackageName> NO_MODULE). This implies a VERSION_VAR value of <PackageName>_VERSION. The command will automatically check whether the package configuration file was found.REASON_FAILURE_MESSAGE <reason-failure-message>New in version 3.16.Specify a custom message of the reason for the failure which will be appended to the default generated message.FAIL_MESSAGE <custom-failure-message>Specify a custom failure message instead of using the default generated message. Not recommended.NAME_MISMATCHEDNew in version 3.17.Indicate that the <PackageName> does not match ${CMAKE_FIND_PACKAGE_NAME}. This is usually a mistake and raises a warning, but it may be intentional for usage of the command for components of a larger package.

用法和示例

使用FindPackageHandleStandardArgs.cmake时,需要提供以下参数:
PACKAGE_NAME:要查找的包的名称。
DEFAULT_MSG:如果找不到包时要显示的默认消息。
CONDITION:一个布尔表达式,用于确定是否找到了包。如果条件为真,则FindPackageHandleStandardArgs.cmake将返回TRUE
REQUIRED_VARS:一个包含所需变量的列表。如果这些变量未定义,则FindPackageHandleStandardArgs.cmake将返回FALSE


**它通常在编写自己的xxx.cmake会被用到 ,至于怎么编写,可以查看我的这篇博客:编写属于自己的Findxxx.cmake文件


下面是FindPackageHandleStandardArgs.cmake的示例用法:
find_package_handle_standard_args(MyPackage REQUIRED_VARS MY_PACKAGE_INCLUDE_DIRS MY_PACKAGE_LIBRARIES)
在这个例子中,我们要查找名为MyPackage的包,并验证MY_PACKAGE_INCLUDE_DIRS和MY_PACKAGE_LIBRARIES这两个变量是否定义。

  • 如果这两个变量未定义,则FindPackageHandleStandardArgs.cmake将返回FALSE。
  • 如果找到了包并且所有必需的变量都已定义,则FindPackageHandleStandardArgs.cmake将返回TRUE,并将输出一个消息,指示已找到包。
  • 如果找不到包,则FindPackageHandleStandardArgs.cmake将显示DEFAULT_MSG中指定的默认消息,并返回FALSE。

在CMake中使用FindPackageHandleStandardArgs.cmake可以帮助简化外部库或工具包的配置过程,减少手动编写配置脚本的工作量。


FindPackageHandleStandardArgs搜索路径

FindPackageHandleStandardArgs宏本身不会搜索路径,它只是用于处理标准的查找参数并输出查找失败消息和查找提示。路径搜索是由find_package命令完成的,该命令在调用FindPackageHandleStandardArgs宏之前会搜索一系列指定的路径。


find_package()命令首先会在模块路径中寻找一个事先编译好的Find.cmake文件,而且一般官方给出了很多,不需要自己编写这是查找库的一个典型方式。 如果Module模式搜索失败,没有找到对应的Find.cmake文件,则转入Config模式进行。


在find_package命令中的路径搜索顺序

  1. 检查是否定义了指定库的导入目录变量,例如_DIR
  2. 检查环境变量,例如_ROOT
  3. 搜索系统路径,例如/usr/include和/usr/lib
  4. 搜索用户指定的路径,例如CMAKE_PREFIX_PATHCMAKE_MODULE_PATH

当找到指定库的头文件和库文件时,find_package会定义一系列变量来描述找到的库,例如_FOUND、_INCLUDE_DIRS和_LIBRARIES。然后,FindPackageHandleStandardArgs宏将使用这些变量来判断查找是否成功,并输出查找提示(如果有)。


运用场景

在 CMake 中,通常使用 find_package 命令来查找并加载所需的外部依赖库,该命令通常会在系统上查找特定的文件或库,或者在预定义的路径中查找这些文件或库。一旦找到了库,那么通常需要对其进行一些配置,比如设置头文件路径、库文件路径、编译选项等。
这时候就可以使用 FindPackageHandleStandardArgs.cmake 宏来进行标准化处理。该宏的作用是:根据找到的库的信息,判断库是否存在、是否可用、是否满足要求,如果符合要求,就将该库的相关信息(包括头文件路径、库文件路径等)传递给 find_package 命令调用方,并设置变量 _FOUND。如果库不符合要求,则给出错误提示。
使用 FindPackageHandleStandardArgs.cmake 的好处在于它可以避免在不同系统、不同版本的库中进行不必要的配置,并能够将配置信息统一化,减少重复代码。同时,使用该宏可以使得查找和配置外部库更加可靠和可移植。


在CMake中,find_package命令的使用方式有多种,其中一种常见的方式是使用预定义的Find模块,例如FindBoost.cmake、FindOpenCV.cmake等。这些Find模块通常已经包含了适当的逻辑来查找并验证库,并在找到库后设置相关的变量和宏。
在这种情况下,find_package命令会直接调用相应的Find模块来查找库,而不会调用FindPackageHandleStandardArgs命令。
然而,对于某些库,可能没有预定义的Find模块可用,或者需要自定义查找逻辑。在这种情况下,用户可以编写自己的Find模块,并在其中调用FindPackageHandleStandardArgs命令来验证库的可用性。


来源地址:https://blog.csdn.net/qq_21438461/article/details/129715844

--结束END--

本文标题: CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法

本文链接: https://www.lsjlt.com/news/385557.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
    FindPackageHandleStandardArgs 前言FindPackageHandleStandardArgs命令命令原型options 用法和示例 FindPackageHa...
    99+
    2023-08-31
    linux bash 服务器 开发语言 c++
  • Linux 中 core dump 文件的作用和使用方法
    Linux 中 core dump 文件 一 、概述1.1 什么是 core dump 文件?1.2 core dump 文件的作用和意义1.3 Linux 中 core dump 文件的保存...
    99+
    2023-09-26
    运维 linux 开发语言 服务器 c语言
  • CMake编译中的库文件和头文件链接是什么
    这篇文章主要介绍了CMake编译中的库文件和头文件链接是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CMake编译中的库文件和头文件链接是什么文章都会有所收获,下面我们一起来看看吧。外部库文件、头文件链接...
    99+
    2023-06-29
  • vscode和cmake编译多个C++文件的实现方法
    目的是利用vscode及相关插件编译多个C++文件。 我已经装好cmake和mingw并且将它们的路径添加到系统变量path中了。 vscode装上如下几个插件: 点击vscode...
    99+
    2024-04-02
  • CMake编译中的库文件和头文件链接你了解吗
    目录外部库文件、头文件链接指令头文件搜索路径链接库文件实例新建工程空间定义src内容编译总结外部库文件、头文件链接 指令 头文件搜索路径 INCLUDE_DIRECTORIES([A...
    99+
    2024-04-02
  • MySQL中ibd文件的作用和特点详解
    MySQL中ibd文件的作用和特点详解 在MySQL数据库中,每个InnoDB表都对应一个.ibd文件,这个文件是InnoDB存储引擎用来存储表的数据和索引的地方。ibd文件是Inno...
    99+
    2024-03-15
    mysql 特点 ibd文件 sql语句
  • Protobuf在Cmake中的正确使用方法详解
    Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据格式。例如,在深度学习中常用的ONNX交换...
    99+
    2024-04-02
  • MySQL中的.ibd文件作用及管理方法
    MySQL中的.ibd文件作用及管理方法 在MySQL中,每个数据库表都会对应一个.ibd文件,这个文件承载着表中的实际数据。.ibd文件的作用非常重要,它存储了表的数据和索引信息,属...
    99+
    2024-03-14
    管理方法 数据表文件 索引数据文件 数据丢失
  • windows下vscode使用cmake的方法
    说在前头: cmake的作用,是通过你的CMakeLists文件,根据你的工程自动帮你成makefile文件。优点是CMakeLists非常简单好写,makefile写起来则比...
    99+
    2024-04-02
  • c++中static的作用和用法
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • c++中static的用法和作用
    c++ 中的 static 关键字用于修改变量、函数和类成员,指示编译器保留其作用域和存储持续时间。其用法包括:声明 static 变量以保留函数调用或对象销毁后的值。声明 static...
    99+
    2024-05-08
    c++ 作用域
  • c++中const的作用和用法
    const 在 c++ 中表示不可变性,用于强制变量、函数参数或类成员保持常量,使其值在程序运行期间不可修改。具体用法包括:修饰变量以强制不可变性,如 const int my_age ...
    99+
    2024-05-01
    c++
  • vue中keepAlive组件的作用和使用方法详解
    前言 在面试的时候,很多面试官再问vue的时候可能就会提一嘴,你知道keep-alive有什么作用吗? keep-alive是vue内置的一个组件,而这个组件的作用就是能够缓存不活动...
    99+
    2024-04-02
  • Python中__init__.py文件的作用
    目录1 init文件夹图标2 init.py导入包方式2.1 单个导入2.2 批量引入(定义__all__用来模糊导入)3 实例4 其他常见问题4.1 使用__init__.py文件...
    99+
    2024-04-02
  • java中常用的文件操作方法有哪些
    这篇文章将为大家详细讲解有关java中常用的文件操作方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。常用的文件的操作方法public class FileUtility { public stat...
    99+
    2023-06-03
  • python3 文件的读取和通用操作
    import os           # 当前操作目录,os.chdir() 切换操作目录 >>> import os >>> os.getcwd() 'C:\\ProgramFiles\\Pyth...
    99+
    2023-01-31
    操作 文件
  • SSH中known_hosts文件作用和常见问题及解决方法
    known_hosts文件 known_hosts文件是SSH客户端中的一个重要配置文件。当首次与一个SSH服务器建立连接时,客户端会记录下该服务器返回的的公钥,并保存在known_hosts文件中,以后每次连接该服务器时,客户端都会验证该...
    99+
    2023-09-04
    服务器 linux ssh
  • PHP中DirectIO操作文件扩展的用法大全
    关于 PHP 的文件操作,我们也将是通过一系列的文章来进行学习。今天我们先学习的是一个很少人使用过,甚至很多人根本不知道的扩展,它与我们日常的文件操作有些许的不同。不过这些差别并不是...
    99+
    2024-04-02
  • Hosts文件的作用和位置详解
    Hosts文件中指定了域名和IP地址的对应关系,如果一个域名在hosts文件中指定了IP地址,在访问此域名时,系统将不会通过DNS(Domain Name System)来解析它的IP地址,而是直接访问所指定的IP地址。...
    99+
    2023-06-16
    Hosts 文件 作用 位置
  • linux上使用cmake安装mysql的方法
    小编给大家分享一下linux上使用cmake安装mysql的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!方法:1、安装ncurses-devel依赖包;2、下载并解压mysql压缩包;3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作