【cmake教程】find_path、find_library、find_program

news2025/6/16 10:29:41

         目录

1、find_path

2、find_library

3、find_program


find_path 参考文章:CMake中find_path的使用-CSDN博客

find_library 参考文章:CMake中find_library的使用

1、find_path

find_path 一般用于在某个目录下查找一个或者多个头文件,命令的执行结果会保存到 <VAR> 中。

(1) 格式

find_path 的格式如下:

find_path (
          <VAR>
          NAMES name1 [name2 ...] 
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [NO_CACHE]
          [REQUIRED]
)

选项解析:

  • <VAR>:用于保存命令的执行结果
  • NAMES:要查找的头文件
  • HINTS | PATHS
    • HINTS:先搜索指定路径,后搜索系统路径
    • PATHS:先搜索系统路径,后搜索
  • NO_CACHE:搜索结果将存储在普通变量中而不是缓存条目(即CMakeCache.txt)中
  • REQUIRED:如果没有找到指定头文件,就出发错误提示,变量会设为 <VAR>-NOTFOUND

执行结果:

        查找成功时,会向变量<VAR>中添加成功找到头文件的目录,如果在某个路径下查找多个头文件,只要查找到多个头文件中的某一个,也算执行成功。

注意:

        虽然HINTS / PATHS后面可以跟多条路径,但是每次只会向变量中<VAR>添加一个目录,那就是成功找到头文件的目录。

(2) 举例

在一条指定路径下查找头文件:

unset(INCLUDE_DIR CACHE)    # 清除之前的缓存
find_path(INCLUDE_DIR       # 在指定路径下查找 gather.h
    NAMES gather.h
    # 虽然有多条路径,但只会把含当前头文件的目录加入到 INCLUDE_DIR 中
    HINTS ${PROJECT_SOURCE_DIR}/vac/util ${PROJECT_SOURCE_DIR}/app1
)
message("${INCLUDE_DIR}")

在多条路径下查找头文件:

unset(INCLUDE_DIR CACHE)    # 清除变量 INCLUDE_DIR 之前的缓存
find_path(INCLUDE_DIR 
    NAMES gather.h
    HINTS ${PROJECT_SOURCE_DIR}/vac/util ${PROJECT_SOURCE_DIR}/app1
)
list(APPEND ADD_INCLUDE_DIR ${INCLUDE_DIR})    # 以追加的方式添加到 ADD_INCLUDE_DIR 
message("${INCLUDE_DIR}")

unset(INCLUDE_DIR CACHE)    # 清除变量 INCLUDE_DIR 之前的缓存
find_path(INCLUDE_DIR 
    NAMES mul.h
    HINTS ${PROJECT_SOURCE_DIR}/vac/util ${PROJECT_SOURCE_DIR}/app1
)
list(APPEND ADD_INCLUDE_DIR ${INCLUDE_DIR})    # 以追加的方式添加到 ADD_INCLUDE_DIR 
message("${INCLUDE_DIR}")

message("${ADD_INCLUDE_DIR}")

2、find_library

find_library 一般直接去查找依赖库文件,和find_package 不一样,find_package 找的是 .cmake 文件,而find_library 直接找 .so 或者 .a 文件。

(1) 格式

相关选项解析可以参考 find_path

find_library (
          <LIBRARY_NAME>
          NAMES name1 [name2 ...] 
          [NAMES_PER_DIR]
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [NO_CACHE]
          [REQUIRED]
)

 选项解析:

  • LIBRARY_NAME:库名。允许两种形式,前缀+库名+后缀、只有库名。
  • NAMES_PER_DIR:表示一个名称遍历查找一次。而不是在某个路径下,查看是否存在多个库

执行结果:

        查找成功时,会向变量<LIBRARY_NAME>中添加成功找到头文件的库文件(包含完整路径),如果在某个路径下查找多个头文件,只要查找到多个头文件中的某一个,也算执行成功。

注意:

          虽然HINTS / PATHS后面可以跟多条路径,但是每次只会向变量中<VAR>添加一个目录,那就是成功找到头文件的目录。

(2) 举例

查找一个或者多个路径也可以参考 find_path

unset(LIBS CACHE)           # 清空变量LIB_DIR 
find_library(LIBS
    NAMES libopencv_core.so    # 前缀+库名+后缀
    HINTS /home/gzx/toolchain/opencv-3.4.10/build/lib
)
message("${LIBS}")    # /home/gzx/toolchain/opencv-3.4.10/build/lib/libopencv_core.so

unset(LIBS CACHE)          # 清空变量LIB_DIR
find_library(LIBS
    NAMES opencv_highgui      # 只有库名
    HINTS /home/gzx/toolchain/opencv-3.4.10/build/lib
)
message("${LIBS}")    # /home/gzx/toolchain/opencv-3.4.10/build/lib/libopencv_highgui.so

3、find_program

find_program 一般用于查找指定名称的可执行文件。相关内容可以参考find_path 或者 find_library

find_program (
          <VAR>
          name | NAMES name1 [name2 ...] 
          [NAMES_PER_DIR]
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [NO_CACHE]
          [REQUIRED]
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASP.NET Core - 依赖注入(一)

1. Ioc 与 DI Ioc 和DI 这两个词大家都应该比较熟悉&#xff0c;这两者已经在各种开发语言各种框架中普遍使用&#xff0c;成为框架中的一种基本设施了。 Ioc 是控制反转&#xff0c; Inversion of Control 的缩写&#xff0c;DI 是依赖注入&#xff0c;Inject Dependency 的…

WebSpider蓝蜘蛛网页抓取工具5.1用户手册

概述 关于网页抓取工具 本工具可以抓取互联网上的任何网页&#xff0c;包括需要登录后才能访问的页面。对抓取到页面内容进行解析&#xff0c;得到结构化的信息&#xff0c;比如&#xff1a;新闻标题、作者、来源、正文等。支持列表页的自动翻页抓取&#xff0c;支持正文页多页…

《Vue3实战》 第二章 创建项目和目录结构

1、创建项目 1.1、命令格式&#xff1a;vue create 项目名称 vue create vue3_example0011.2、运行项目 npm run serve1.2.1、增加run命令 启动时想修改命令&#xff0c;例如&#xff1a; npm run dev1、找到项目根路径下的package.json文件&#xff1b; 2、找到【scripts…

webgl-根据鼠标点击而移动

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

DDoS攻击实验笔记

DoS&DDoS简介 DoS(Denial of Service)&#xff0c;拒绝服务攻击是通过一些方法影响服务的可用性&#xff0c;比如早期主要基于系统和应用程序的漏洞&#xff0c;只需要几个请求或数据包就能导致长时间的服务不可用&#xff0c;但易被入侵检测系统发现。 DDoS(Distributed D…

大数据Flink进阶(十八):Flink执行图和TaskSlot问题思考

文章目录 Flink执行图和TaskSlot问题思考 一、Flink执行图 二、TaskSlot问题思考 Flink执行图和TaskSlot问题思考 一、Flink执行图 Flink代码提交到集群执行时最终会被转换成task分布式的在各个节点上运行,在前面我们学习到DataFlow数据流图

【中级软件设计师】—操作系统考点总结篇(二)

【中级软件设计师】—操作系统考点总结篇&#xff08;二&#xff09; 1.操作系统概述 1.1操作系统的功能 1.2 特殊的操作系统 1.3 进程的概念和状态 进程与程序的区别&#xff1a; 进程是程序的一次执行过程&#xff0c;没有程序就没有进程 程序是一个静态的概念&#xff0c;…

【网络编程】TCP,UDP协议详解

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 目录 前言 TCP协议 TCP协议特点 TCP协议通…

Python 小型项目大全 1~5

一、百吉饼 原文&#xff1a;http://inventwithpython.com/bigbookpython/project1.html 在百吉饼这种演绎逻辑游戏中&#xff0c;你必须根据线索猜出一个秘密的三位数。该游戏提供以下提示之一来响应您的猜测&#xff1a;"Pico"&#xff0c;当您的猜测在错误的位置有…

询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)

目录前言一、提示工程简介二、提示技巧2-1、生成法律文件2-2、添加提示技巧三、角色扮演3-1、智能手机产品描述3-2、添加角色扮演四、标准提示4-1、写一篇有关于新智能手机的评论4-2、添加标准提示、角色提示、种子词提示等等五、示例很少、或者没有示例5-1、生成一个手机配置六…

深度理解PyTorch的WeightedRandomSampler处理图像分类任务的类别不平衡问题

最近做活体检测任务&#xff0c;将其看成是一个图像二分类问题&#xff0c;然而面临的一个很大问题就是正负样本的不平衡问题&#xff0c;也就是正样本&#xff08;活体&#xff09;很多&#xff0c;而负样本&#xff08;假体&#xff09;很少&#xff0c;如何处理好数据集的类…

springboot实现邮箱验证码功能

引言 邮箱验证码是一个常见的功能&#xff0c;常用于邮箱绑定、修改密码等操作上&#xff0c;这里我演示一下如何使用springboot实现验证码的发送功能&#xff1b; 这里用qq邮箱进行演示&#xff0c;其他都差不多&#xff1b; 准备工作 首先要在设置->账户中开启邮箱POP…

ChatAudio 通过TTS + STT + GPT 实现语音对话(低仿微信聊天)

效果图什么是 STT 和 TTS&#xff1f;STT 是语音转文字&#xff08;Speech To Text&#xff09;TTS 是文字转语音&#xff08;Text To Speech&#xff09;为什么要使用 SST TTS 如果用户直接输入音频&#xff0c;OpenAI 的 API 中并没有直接使用语音和 GPT 进行对话的功能。所…

(C++)模板分离编译面对的问题

什么是分离编译模板的分离编译什么是分离编译 一个程序&#xff08;项目&#xff09;由若干个源文件共同实现&#xff0c;而每个源文件单独编译生成目标文件&#xff0c;最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。 模板的分离编译 假如有以下…

Java锁机制

Java锁机制1. 什么是锁JVM运行时内存结构2. 对象、对象头结构Mark Word中的字段3. synchronizedMonitor原理四种锁状态的由来4. 锁的4种状态4.1 无锁CAS&#xff08;Compare and Swap&#xff09;4.2 偏向锁实现原理4.3 轻量级锁如何判断线程和锁之间的绑定关系自旋4.4 重量级锁…

【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

前言 人脸检测的目标是找出图像中所有的人脸对应的位置&#xff0c;算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式&#xff0c;下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。 程序流程 代码 impo…

摩兽Pesgo plus首发爆卖,全网关注度破亿!中国潮玩跨骑电自浪潮已至?

2023年4月11日&#xff0c;TROMOX摩兽圆满举办了“跨骑潮电&#xff0c;大有所玩”Pesgo plus新品发布会。发布会在抖音、天猫、视频号平台进行了同步直播并开启线上预定。发布会直播当晚&#xff0c;摩兽Pesgo plus即狂揽线上订单&#xff0c;全网各大平台相关话题累计热度已破…

XXL-JOB分布式任务调度平台详细介绍

一、概述 在平时的业务场景中&#xff0c;经常有一些场景需要使用定时任务&#xff0c;比如&#xff1a; 时间驱动的场景&#xff1a;某个时间点发送优惠券&#xff0c;发送短信等等。 批量处理数据&#xff1a;批量统计上个月的账单&#xff0c;统计上个月销售数据等等。 固…

用SQL语句操作oracle数据库--数据查询(上篇)

SQL操作Oracle数据库进行数据查询 Oracle 数据库是业界领先的关系型数据库管理系统之一&#xff0c;广泛应用于企业级应用和数据仓库等场景中。本篇博客将介绍如何使用 SQL 语句对 Oracle 数据库进行数据查询操作。 1.连接到数据库 在开始查询之前&#xff0c;需要使用合适的…

素材管理系统概念导入

引言 由于工作上的调整安排&#xff0c;有幸参加营销素材管理系统的产品建设工作中&#xff0c;营销宣传领域一直是我的知识盲区&#xff0c;所以素材管理系统的产品建设对我来说是个富有挑战性的工作&#xff0c;在这过程中&#xff0c;我也秉持着“好记性不如烂笔头”的原则&…