概述

macOS开发时常常使用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.70.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库regexsystem,编写如下的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_70_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_70_0/include.
-- Boost_LIBRARIES = /usr/local/install/boost_1_70_0/lib/libboost_regex.so;/usr/local/install/boost_1_62_0/lib/libboost_system.so.
-- Boost_LIB_VERSION = 1_70.

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})

【Boost】CMake中引用Boost库的更多相关文章

  1. VC中引用第三方库,常见的库冲突问题

    Q:VC中引用第三方库,常见的库冲突问题 环境:[1]VS2008 [2]WinXP SP3 A1(方法一): [S1]第三方库(Binary形式的)如果同主程序冲突,则下载第三方库的源码[S2]保持 ...

  2. 在项目中引用GreenDroid库

    1.下载GreenDroid库 首先,我们得从Git上下载这个库,我用的是git for windows下载的.先下载,安装.安装完后,打开git for windows ,直接将浏览器中GreenD ...

  3. VS中引用第三方库的方法(配置sqlite数据库)

    我们在编写程序时,,不可避免的会使用第三方的库文件,很少使用源文件(.cpp),大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll),比如我们写程序用的iostream这个库, ...

  4. [学习笔记] 在Eclipse中添加用户库 Add User Libraries ,在项目中引用用户库

    如果还没有安装Eclipse, 则请参考前文:  [学习笔记] 下载.安装.启动 Eclipse(OEPE) 添加用户库 本文主要介绍在项目中直接使用第三方库的情况.就是把第三方的jar文件直接放到某 ...

  5. (转)HelloWorld CMake CMake中构建静态库与动态库及其使用

    继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello ...

  6. Angular-Cli中引用第三方库

    最近在学习angular(AngularJS 2),根据教程使用angular-cli新建项目, 然而在添加JQuery和Bootstrap第三方库时遇到了问题... 初试 我最初的想法是直接将相对路 ...

  7. cmake配置项目引用动态库

    note 本文将介绍使用FIND_PACKAGE配置项目动态库的方法 cmake version: 3.18 platform: win10 20H2 概述 创建了一个动态库,再由主项目调用该动态库. ...

  8. eclipse 引用静态库设置选项

    环境说明: 静态库文件项目:engine C++ 项目:server 在server项目中引用静态库的库文件libEngine.a 需要设置如图选项,才能引用静态库项目里的文件 主要设置: 1.inc ...

  9. Flutter如何引用第三方库并使用

    Flutter如何引用第三方库并使用 https://www.jianshu.com/p/bbda7794345e Flutter官网点击访问Flutter教程(一)Flutter概览Flutter教 ...

  10. Qt中使用Boost库

    关于boost库的编译,请看https://www.cnblogs.com/HackerArt/p/10539516.html 网上可以查到很多介绍qt使用库文件的教程,但是大多都没有注意到,qt中支 ...

随机推荐

  1. 玩转开源 | 搭建 Hugo 管理 Markdown 文档

    在工作.学习中,不可避免会要写一些文档:又或者想搭建个简单网站,记录和分享您的生活经验或知识:撰写这些文档中使用 markdown 是一个非常不错的选择,让我们更加聚焦在文档表达的内容上.实际上笔者的 ...

  2. 阿里云服务器docker系统 BUG

    阿里云服务器docker系统 BUG购买了阿里云新加坡区的轻量服务器,安装的是docker专用系统,故障现象:docker镜像下载后,docker网络不通,docker端口不通,网络一直不通,通过防火 ...

  3. Redis缓存使用技巧和设计方案?薪火数据知识库

    Redis是一种开源的内存数据库,被广泛应用于缓存系统设计和实现中.它提供了高性能.低延迟的数据访问,并支持多种数据结构和丰富的功能.下面将详细介绍Redis缓存的使用技巧和设计方案. 一.Redis ...

  4. STM32一个定时器输出四路不同频率和占空比PWM波的方法

    一般来说,一个定时器输出4路频率相同.占空比不同的PWM波是比较容易的,使用PWM模式即可实现.如果说是输出4路频率不同.占空比不同的PWM就没有现成的模式,是不是无法实现了呢?答案肯定是" ...

  5. 【软件安装】vmware虚拟机安装完整教程(15.5版本)

     目录 一.基础介绍 二.准备工作(注意:如果自己下载不下来翻到最下面获取下载地址) 三.VMware下载与安装 VMware Workstation15.5新功能 注意: 一.基础介绍 VMware ...

  6. isAlive

    线程存活 当线程执行时显示线程存活 执行完毕为false

  7. Leader笔记:程序员小团队透明和信任管理

    今天想跟大家分享一下小团队的透明管理,这也是一个管理技巧,相信很多Leader身份的同学都了解到主管有很大的一个优势,就是在组织内拥有了信息不对称能力,Leader能够听到和了解到完全不同层面上的内容 ...

  8. 算法2:Hanoi塔

    汉诺(Hanoi)塔 一.背景介绍 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了 ...

  9. cmake的安装方法

    最近参与一个新项目,这个项目使用cmake作为构建系统.作为Java程序员,平常都使用ant或者maven来构建,难得有机会接触cmake之类的工具,所以参与这个项目是个学习cmake的好机会. 但干 ...

  10. Python 潮流周刊第 33 期(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...