CMake中引用Boost库

2023-10-27

CMake中引用Boost库

概述

Linux开发时常常使用Boost库,若项目使用CMake进行组织管理和编译,需要掌握在CMake中实现Boost库的引用的基本语法。本片博客结合自己在实际使用过程中的经验进行总结,以期回顾和进行阶段总结。

CMakeLists.txt编写

find_package

通过调用find_package可以找到头文件和所需要的库文件或者是一个CMake打包配置文件。

find_package(Boost
  [version] [EXACT]      # 可选项,最小版本或者确切所需版本
  [REQUIRED]             # 可选项,如果找不到所需库,报错
  [COMPONENTS <libs>...] # 所需的库名称,比如说. "date_time" 代表 "libboost_date_time"
  )     

示例

find_package(Boost 1.62.0 REQUIRED
             COMPONENTS system filesystem thread)

运行完后可以得到很多变量,下面列了一些主要的。

Boost_FOUND            - 如果找到了所需的库就设为true
Boost_INCLUDE_DIRS     - Boost头文件搜索路径
Boost_LIBRARY_DIRS     - Boost库的链接路径
Boost_LIBRARIES        - Boost库名,用于链接到目标程序
Boost_VERSION          - 从boost/version.hpp文件获取的版本号
Boost_LIB_VERSION      - 某个库的版本

搜索路径设置

Boost库是自定义安装路径,可以在搜索package之前,通过设置一些变量来帮助boost库的查找。

BOOST_ROOT             - 首选的Boost安装路径
BOOST_INCLUDEDIR       - 首选的头文件搜索路径 e.g. <prefix>/include
BOOST_LIBRARYDIR       - 首选的库文件搜索路径 e.g. <prefix>/lib
Boost_NO_SYSTEM_PATHS  - 默认是OFF. 如果开启了,则不会搜索用户指定路径之外的路径

用例

假如目标程序foo需要链接Boost库regex和system,编写如下的CMakeLists文件

# CMakeLists.txt
project(tutorial-0)
cmake_minimum_required(VERSION 3.7)
set(CMAKE_CXX_STANDARD 14)

set(BOOST_ROOT /usr/local/install/boost_1_62_0) // 设置boost库搜索路径
set(Boost_NO_SYSTEM_PATHS ON) // 只搜索上语句设置的搜索路径

find_package(Boost COMPONENTS regex system REQUIRED)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    
    MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
    MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
    MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")

    add_executable(foo foo.cpp)
    target_link_libraries (foo ${Boost_LIBRARIES})
endif()
  • 通过设置BOOST_ROOT来设置首选的搜索路径
  • 通过MESSAGE函数把查找的结果都打印了出来
-- Boost_INCLUDE_DIRS = /usr/local/install/boost_1_62_0/include.
-- Boost_LIBRARIES = /usr/local/install/boost_1_62_0/lib/libboost_regex.so;/usr/local/install/boost_1_62_0/lib/libboost_system.so.
-- Boost_LIB_VERSION = 1_62.

Boost动态库链接

若项目包含多个子模块,且子模块只用到顶层模块find_package找到的部分库,则可以使用下述语句实现只链接子模块所需要的Boost动态库

 target_link_libraries(foo Boost::regex) // 只使用regex

Boost头文件库链接

Boost库中有部分库只用头文件实现,并没有相应的动态库,若使用这部分库可以通过以下语句实现:

target_link_libraries(foo Boost::boost)
or
target_include_directories(${Boost_INCLUDE_DIRS})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake中引用Boost库 的相关文章

随机推荐

  • linux c++ 第三章

    1 整型 int short long long long char unsigned int unsigned short 2 最值 include
  • 工作量证明如何拦截97.42%异常机器流量?

    近期休闲小游戏 羊了个羊 火爆朋友圈 这款第二关难度系数极高且带有省份和个人排名的小程序游戏甚至在最高峰时段热度指数超过了和平精英和英雄联盟 但不管是MOBA手游英雄联盟还是休闲小游戏羊了个羊 在繁荣的背后游戏外挂脚本屡见不鲜 羊了个羊游戏
  • selenium入门教程

    目录 1 安装selenium 2 安装浏览器驱动 3 添加浏览器扩展selenium ide 录制操作流程 4 导出python文件 调整脚本 运行脚本 1 安装selenium 使用python自带的包管理器pip工具就可以下载sele
  • 剑指Offer第21题(包含min函数的栈)

    本博客旨在个人总结回顾 题目描述 定义栈的数据结构 请在改类型中实现一个能够得到栈的最小元素的min函数 在改栈中 调用min push及pop的时间复杂度都是O 1 解题思路 当题目思路不清晰时可使用画图或表格来模拟步骤 并慢慢发现其中的
  • 单片机不支持printf 浮点类型的解决办法

    在一些单片机中因为资源受限官方提供的SDK中通常不提供浮点类型数据的打印 如需浮点打印功能可以参考如下做法 前提条件 1 串口通信正常 2 printf 函数已经移植完成 操作方法 1 添加以下函数到工程 以下函数的作用为将一个float类
  • 实现一台电脑登录多个微信账号/一个微信账号在多台电脑登录

    一 一台电脑登录多个微信账号 在电脑桌面建立一个txt文档文件 输入内容 echo off start d C Program Files Tencent WeChat WeChat exe start d C Program Files
  • 鸿星尔克的对话

    夏季 炎热 每一次水灾都是见证人心 见证中国 奇迹的时候 太多太多感触东西 生在这样国度 倍感荣幸 鸿星尔克 火 天上掉下来的馅饼被一个真诚企业接住 应该值得庆幸 但是不是所有人都能接着住的 理性消费 为消费者 不要因为我们 给同行造成困扰
  • pytorch+transformer:简单的时序信号监测

    这里是厂妹 今天整个小课题试试看 上次那个机械臂因为专利问题暂时下架 等专利出来了再发布 话不多说 这次就直接开始吧 1 概述与思路详解 这又是放在一个硬件上面搭配的算法 放在可变换姿态的硬件上 判断当前倾角姿态和硬件姿态的关系 可能融合一
  • 2022年度编程语言排行榜来啦,它凭什么能超过C语言,排名第一?

    IEEE Spectrum 发布了 2023 年度编程语言排行榜 其中 Python 在总榜单以及其他几个分榜单中依然牢牢占据第一名的位置 另外值得关注的是微软 C 语言 它的排行从 2022 年的第 23 名跃升至了今年的第 6 名 称得
  • proxmox-(一)维护小工具

    一常用维护工具 1 1 任务卡主了 后台强制关机 找到对应虚机锁文件 直接删除该锁文件 然后后台执行命令 关机 比如 101虚机 前台执行的关机task 一直在运行 root procompute01 ps ef grep task roo
  • Java 数据结构与算法 栈和队列

    在生活中 我们常常遇到这样的情景 1 某人在学校发书的时候 如果要拿出最上面的书来看 那么直接拿出来就可以了 但是如果想要拿出中间某个位置的书来看 必须要挪开它上面压的书 才能看到这本书 这个时候 就是只能最上面的先拿出来 最下面的后拿出来
  • Numpy 的文件存储.npy和.npz 区别

    Numpy能读写磁盘上的文本数据和二进制数据 提供了多种存取数组内容的文件操作函数 保存数组数据的文件可以是二进制格式或者文本格式 1 将数组以二进制格式保存到磁盘 npy格式 np load 和 np save 是读写磁盘数组数据的两个主
  • 【操作系统实验】Ubuntu Linux 虚拟机文件查找相关命令

    文章目录 whereis help man find locate grep wc 管道 whereis 功能描述 寻找命令的二进制文件 同时也会找到其帮助文件 主要功能是寻找一个命令所在的位置 和find相比 whereis查找的速度非常
  • Linux下安装Jupyter并配置多个ipykernel

    安装Jupyter pip3 install jupyter notebook 或者 pip install i https pypi douban com simple jupyter 生成配置文件 jupyter notebook ge
  • Qt开源库-工具选项卡-【TabToolBar】

    一 序言 对于Windows 的文件管理器的菜单栏 设计得很漂亮 如下图所示 本文分享一个用于开发类似于Windows 文件管理器菜单栏的Qt开源库 TabToolBar 开源项目URL https github com SeriousAl
  • idea创建Gradle项目

    Gradle是什么 Gradle是一种以Groovy语言为基础的自动化构建工具 自动化构建本质上也是一种程序 我们开始编译时就启动这个程序 然后读取我们在 gradle 文件中配置的参数来实例化各个类 然后按照顺序依次执行对应的任务即可完成
  • CSS样式大全(网络收集整理)

    CSS样式大全 网络收集整理 字体属性 font 大小 font size x large 特大 xx small 极小 一般中文用不到 只要用数值就可以 单位 PX PD 样式 font style oblique 偏斜体 italic
  • MyBatis动态拼接sql,statementType="STATEMENT"使用

    背景 写一个需求 展示数据的结果需要将查询出来的结果列转行 但是发现需要列转行的数据是动态的 没办法确定有多少个 所以需要动态的拼接sql处理 起初设想是在MyBatis里面去动态拼接 然后尝试多次放弃了 要动态拼接的sql如下 下面是静态
  • [转]QNX-Momentics-IDE开发环境设置-功能调试

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 一 QNX M
  • CMake中引用Boost库

    CMake中引用Boost库 文章目录 概述 CMakeLists txt编写 find package 搜索路径设置 用例 Boost动态库链接 Boost头文件库链接 概述 在Linux开发时常常使用Boost库 若项目使用CMake进