返回顶部
首页 > 资讯 > 服务器 >2.cmake添加库
  • 475
分享到

2.cmake添加库

linux运维服务器 2023-08-21 13:08:11 475人浏览 安东尼
摘要

add_library()add_subdirectory()target_include_directories()target_link_libraries()PROJECT_SOURCE_DIR 1. 创建库 要在cmake中添加库,

  • add_library()
  • add_subdirectory()
  • target_include_directories()
  • target_link_libraries()
  • PROJECT_SOURCE_DIR

1. 创建库

要在cmake中添加库,请使用add_library()并指定由哪些源文件组成库。

我们可以使用一个或多个子目录来组织项目,而不是将所有源文件放在一个目录中。在这种情况下,我们将专门为库创建一个子目录。

在这里,我们可以添加一个新的CMakeLists.txt文件和一个或多个源文件。在顶级CMakeLists.txt文件中,我们将使用add_subdirectory()将子目录添加到构建中。

一旦创建了库,它就通过target_include_directory()target_link_library()连接到我们的可执行目标。

这里,我们将向项目中添加一个库,其中包含我们自己的实现,用于计算数字的平方根。然后,可执行文件可以使用这个库,而不是编译器提供的标准平方根函数。

我们将这个库放在一个名为Mathfunction的子目录中。这个目录以及包含一个头文件MathFunctions.h和一个源文件mysqrt.cxx。我们不需要修改这两个文件中的任何一个。源文件。源文件有一个名为mysqrt的函数,它提供与编译器的sqrt函数类似的功能。

Help/guide/tutorial/Step2中完成TODO 1~6;
首先是MathFunctions子目录中的单行CMakeLists.txt
下来,是顶层CMakeLists.txt
最后,使用新创建的库。

mkdir Step2_buildcd Step2_buildcmake ../Step2cmake --build .
  1. TODO 1
    Mathfunction目录中的CMakeLists.txt文件中,我们使用add_library()创建一个名为Mathfunction的库目标。库的源文件作为参数传递给add_library()
    add_library(MathFunctions mysqrt.cxx)
  2. TODO 2
    为了使用这个新库,在顶级CMakeLists.txt中添加add_subdirectory()调用,以便构建这个库。
    add_subdirectory(MathFunctions)
  3. TODO 3
    下来,使用target_link_library()将新的库目标链接到可执行目标。
    target_link_libraries(Tutorial PUBLIC MathFunctions)
  4. TODO 4
    最后,需要指定库的头文件的位置。修改target_include_directory(),将MathFunctions.h子目录添加为include目录,以便可找到MathFunctions.h文件。
    target_include_directories(Tutorial PUBLIC            "${PROJECT_BINARY_DIR}"            "${PROJECT_SOURCE_DIR}/MathFunctions"            )
  5. TODO 5
    使用库函数
    #include "MathFunctions.h"const double outoutValue = mysqrt(inputValue);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2QMLt3VB-1673753439626)(vx_images/334435414616010.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XheElqxX-1673753439631)(vx_images/107916137941761.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ewKEBGM9-1673753439633)(vx_images/435676301890165.png)]

  • 如果不在target_include_direcotry()中添加lib,会找不到头文件func.h
  • 如果没有add_subdirectory(lib),不会构建子目录,会导致找不到链接库。

2. 让库可选

cmake可以使用option()命令,这为用户提供了一个变量,他们可以在配置cmake构建时更改该变量,此设置将存储在缓存中,因此用户无需每次在构建目录上运行cmake时都设置该值。

首先,在顶层CMakeLists.txt中用option()创建一个变量USE_MYMATH 。在同一个文件中,使用这个选项来决定是否构建并使用MathFunctions库。

cd ../Step2_buildcmake --build .

现在让我们更新USE_MYMATHto的值为OFF,

cmake ../Step2 -D USE_MYMATH=OFF

然后构建

cmake --build .

解决方案

第一步是向顶层CMakeLists.txt文件添加一个选项。

option(USE_MYMATH "Use tutorial provided math implementation" ON)

接下来,使构建和链接MathFunctions库成为可选的,把他们添加到列表中。

if(USE_MYMATH)    add_subdirectory(MathFunctions)    list(APPEND EXTRA_LIBS MathFunctions)    list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")endif()

现在,有了两个列表,我嫩需要更新target_link_libraries()target_include_directories()来使用它们.
对于target_link_libraries(), 我们将写出的库名称替换为EXTRA_LIBS. 这看起来像下面这样:

target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})
target_include_directories(Tutorial PUBLIC"${PROJECT_BINARY_DIR}"${EXTRA_INCLUDES})

这是处理许多组件时的经典方法。我们将在本教程的第 3 步中介绍现代方法。

对源代码的相应更改非常简单。首先,在 中tutorial.cxx,我们包含MathFunctions.h标头if USE_MYMATH

tutorial.cxx

#ifdef USE_MYMATH#    include "MathFunctions.h"#endif

然后,在同一个文件中,我们使用USE_MYMATH来控制使用哪个平方根函数:

#ifdef USE_MYMATH    const double outputValue = mysqrt(inputValue);#else    const double outputValue = sqrt(inputValue);#endif

由于源代码现在需要USE_MYMATH我们可以将其添加到 TutorialConfig.h.in:

TutorialConfig.in:

#cmakedefine USE_MYMATH

来源地址:https://blog.csdn.net/qq_51470638/article/details/128692926

--结束END--

本文标题: 2.cmake添加库

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

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

猜你喜欢
  • 2.cmake添加库
    add_library()add_subdirectory()target_include_directories()target_link_libraries()PROJECT_SOURCE_DIR 1. 创建库 要在cmake中添加库,...
    99+
    2023-08-21
    linux 运维 服务器
  • 2 数据库安全加固
    2 数据库安全加固... 282.1 修改root用户默认口令,删除空口令... 302.2 删除默认数据库和非必要数据库用户... 312.3 使用独立用户运行msyql322.4 关于非root数据库用...
    99+
    2024-04-02
  • 添加和使用 Go 模块库次要版本(主要版本 > 2)
    问题内容 我一直致力于将我们的私有库转换为 go 模块,并且克服了发布和使用库的新主要版本(例如 tssgit.reyrey.com/teschste/go-httpmailer/v3...
    99+
    2024-02-05
  • MongoDB添加secondary节点的2种方法详解
    前言 前段时间维护的一个事业群的其中一条业务线的开发找到运维,提出来了一个MongoDB的优化问题,那段时间MongoDB正在从op管理移交给db进行维护,整个部门都对MongoDB的运维经验缺乏,Mong...
    99+
    2024-04-02
  • pandas添加自增列的2种实现方案
    有时候我们需要添加一列自动增加数字的列,可以用下面两种方法: 第一种 >>> import pandas as pd >>> df = pd....
    99+
    2024-04-02
  • 如何给python添加库
    要给Python添加库,可以使用pip(Python包管理工具)来安装库。以下是使用pip安装库的步骤:1. 打开命令提示符或终端窗...
    99+
    2023-08-09
    python
  • AndoridSQLite数据库开发中如何为数据库添加添加空表
    AndoridSQLite数据库开发中如何为数据库添加添加空表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。AndoridSQLite数据库开发为数据库添加添加空表如果开发...
    99+
    2023-06-05
  • Cmake学习记录(九)--使用Cmake交叉编译Android .so库
    文章目录 一、前言二、使用NDK进行编译的相关代码四、使用交叉工具链进行编译五、参考链接 一、前言 注意:本教程没有关于JNI接口的写法,只是把C代码编译成适合android平台的so库,...
    99+
    2023-09-12
    学习 android android studio
  • MYSQL 主从添加新从库
    MySQL 主从复制,不停机添加新从节点 1、主库创建账号: show master status; GRANT REPLICATION SLAVE ON . to 'reader'@'%' identif...
    99+
    2024-04-02
  • python如何添加函数库
    在python中添加函数库的方法例:在python中添加numpy函数库首先,在浏览器中进入Python官网;进入到Python官网后,将numpy源码包下载到python安装目下的scripts文件夹中;numpy源码包下载好后,在计算机...
    99+
    2024-04-02
  • matlab如何添加函数库
    要添加函数库到MATLAB中,您可以按照以下步骤操作:1. 找到您要添加的函数库文件。该文件通常是以 .m 文件扩展名结尾的 MAT...
    99+
    2023-09-14
    matlab
  • git怎么添加版本库
    Git是一种分布式版本控制系统,它可以帮助开发人员管理代码的历史版本,并协同开发项目。添加版本库是Git中非常重要的一个步骤。本文将介绍如何在Git中添加版本库。一、创建版本库要在Git中创建版本库,需要在计算机上创建一个目录并使用Git命...
    99+
    2023-10-22
  • word字体库如何添加
    这篇文章主要讲解了“word字体库如何添加”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“word字体库如何添加”吧!首先在网上下载想要使用的字体,将它解压出来。解压后,得到字体文件,复制该文...
    99+
    2023-07-02
  • navicat怎么添加数据库
    navicat添加数据库的步骤:打开navicat,选择“新连接”。选择数据库类型(如mysql)。输入连接信息:主机名、端口、用户名、密码。输入连接名称。测试连接,验证成功。保存连接。...
    99+
    2024-04-06
    mysql navicat
  • sql怎么添加数据库
    在 sql 中添加数据库: 1. 连接数据库服务器,验证用户名和密码; 2. 创建数据库,使用 create database 语句; 3. 断开连接,使用 exit 命令; 4. 验证...
    99+
    2024-05-30
    mysql
  • 2行Python代码实现给pdf文件添加水印
    目录1、 引言2、指定水印内容输出到pdf文件2.1 模块安装2.2 思路2.3 代码示例3、水印内容批量输出到pdf文件3.1 模块安装3.2 思路3.3 代码示例4、总结1、 引...
    99+
    2024-04-02
  • linux怎么添加远程仓库
    这篇文章主要介绍“linux怎么添加远程仓库”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux怎么添加远程仓库”文章能帮助大家解决问题。   思路:   ...
    99+
    2024-04-02
  • PyCharm 添加库的完整指南
    如何在PyCharm中添加库?详细教程分享 在Python开发中,经常会使用第三方库来帮助我们更高效地完成任务。PyCharm作为一款优秀的整合开发环境,为我们提供了便捷的方式来管理和...
    99+
    2024-02-25
    pycharm 安装第三方库 添加库
  • 八、Python Django数据库添加查询
    Python Django数据库添加查询对数据进行操作一、创建记录# pwd/root/csvt03# ipython manage.py shellIn [1]: from blog.models imp...
    99+
    2024-04-02
  • mysql中添加数据库的方法
    这篇文章给大家分享的是有关mysql中添加数据库的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql中添加数据库的方法:使用“CREATE DATABASE”语法来创建...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作