find_package 总结

本文参考:“轻松搞定CMake”系列之find_package用法详解

原理

find_package 即在指定目录CMAKE_MODULE_PATHCMAKE_PREFIX_PATH查找对应的cmake文件。

find 模式

  • Module模式(默认):查询Findxxx.cmake配置文件, 在CMAKE_MODULE_PATH 目录
  • Config模式:查询xxxConfig.cmake or <lower-case-package-name>-config.cmake配置文件,在xxx_DIRCMAKE_PREFIX_PATH目录

如果Module模式失败则自动转入Config模式。如果Config失败,则find_package 失败。

Config模式路径查找顺序

  1. 名为<PackageName>_DIR的CMake变量或环境变量路径(默认为空)
  2. 名为CMAKE_PREFIX_PATHCMAKE_FRAMEWORK_PATHCMAKE_APPBUNDLE_PATH的CMake变量或环境变量路径
  3. PATH环境变量路径

findxxx.cmake配置文件大众规则(规则、变量自定义)

xxx_FOUND:BOOL 类型,如果成功则为true
xxx_INCLUDES: 模块的头文件位置
xxx_LIBRARIES:库文件位置

demo展示(add)

findadd.cmake or addConfig.cmake

message("Find add:"  $ENV{path})
message("PROJECT_SOURCE_DIR:"${PROJECT_SOURCE_DIR})
#find headers
find_path(add_INCLUDESNAMES add.h PATHS ${PROJECT_SOURCE_DIR}/add ${PROJECT_SOURCE_DIR}/add1)#find lib
find_library(add_LIBRARIES NAMES add.libPATHS ${PROJECT_SOURCE_DIR}/add/lib ${PROJECT_SOURCE_DIR}/add1/lib)message("add_INCLUDES="${add_INCLUDES})
message("add_LIBRARIES="${add_LIBRARIES})if(add_LIBRARIES AND add_LIBRARIES)set(add_FOUND TRUE)
endif()message("add_FOUND:"${add_FOUND})

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)project(mylib)#module 模式
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/)#config模式
set(add_DIR ${PROJECT_SOURCE_DIR}/cmake/)
message("CMAKE_MODULE_PATH=" ${CMAKE_MODULE_PATH})
find_package(add)if(add_FOUND)
message("add package find")
else(add_FOUND)
message("add package not find")
endif(add_FOUND)

结果展示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCD屏的应用

一、LCD屏应用 Linux下一切皆文件&#xff0c;我们的LCD屏再系统中也是一个文件&#xff0c;设备文件&#xff1a;/dev/fb0。 如果要在LCD屏显示数据&#xff0c;那我们就可以把数据写入LCD屏的设备文件。 1.显示颜色块 LCD屏分辨&#xff1a;800*480 像素 32位:说明一个像…

算法打卡day19|二叉树篇08|Leetcode 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

算法题 Leetcode 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 大佬视频讲解&#xff1a;二叉搜索树的最近公共祖先视频讲解 个人思路 昨天做过一道二叉树的最近公共祖先&#xff0c;而这道是二叉搜索树&#xff0c;那就要好好利用这个有序的特点…

Vue 全家桶

第 1 章&#xff1a;Vue 核心 第 2 章&#xff1a;vue 组件化编码 第 3 章&#xff1a;vue-ajax 第 4 章&#xff1a;vue UI组件 第 5 章&#xff1a;vue-router 第 6 章&#xff1a;vuex 第 7 章&#xff1a;vue源码分析

Internet协议的安全性

Internet协议的安全性 文章目录 Internet协议的安全性1. 网络层1. IP*62. ARP*33. ICMP * 3 2. 传输层协议1. TCP1. * SYN-Flood攻击攻击检测* 防御 2. TCP序号攻击攻击 3. 拥塞机制攻击 2. UDP 3. 应用层协议1. DNS攻击*3防范*3: 2. FTP3. TELNET: 改用ssh4. 电子邮件1. 攻击2…

python二级备考(3)-综合应用

1 《命运》是著名科幻作家倪匡的作品。这里给出《命运》的一个网络版本文件&#xff0c;文件名为“命运. txt”。 问题1 (5分) :在PY301-1. py文件中修改代码&#xff0c;对“命运. txt”文件进行字符频次统计&#xff0c;输出频次最高的中文字符(不包含标点符号)及其频次&…

Java学习笔记------常用API(五)

爬虫 从网站中获取 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.reg…

MySQL语法分类 DQL(4)聚合函数

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

php中 0 == ‘’(0等于任意字符串) 判断是否成立 返回true

php中不同类型变量之间比较大小 一、背景二、探究0是为什么&#xff1f;三、探究 0all是为什么&#xff1f;四、程序中如何判断0是否等于指定字符串 一、背景 最近在项目实际开发中&#xff0c;我需要判断前端传来的参数值是否等于一个字符串&#xff1b;然后发现当参数值是0时…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

L1-070 吃火锅分数 15

我们老师的话说就是&#xff0c;你学长睡了四年的床板子你不收拾收拾就往上躺着睡觉吗&#xff1f;&#xff1f;&#xff1f;一定要记得用到计数变量时首先要赋初值0或者其他&#xff0c;按题目要求来。 用 输入样例 1&#xff1a; Hello! are you there? wantta chi1 huo3…

Python爬虫 Day1

要注意看网页的请求方式是request还是get 一、小型爬虫 &#xff08;爬百度首页&#xff09; from urllib.request import urlopen url "https://www.baidu.com" resp urlopen(url) print(resp.read().decode(utf-8)) print("over!") //&#xff01;&am…

Linux磁盘配额

磁盘配额 概述 Linux系统作为一个多用户的操作系统&#xff0c;在生产环境中&#xff0c;会发生多个用户共同使用一个磁盘的情况&#xff0c;会造成Linux根分区的磁盘空间耗尽&#xff0c;导致Linux系统无法建立新的文件&#xff0c;从而出现服务程序崩溃、系统无法启动等故障…