我的编程空间,编程开发者的网络收藏夹
学习永远不晚

2.cmake添加库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

2.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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

2.cmake添加库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2.cmake添加库

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

添加和使用 Go 模块库次要版本(主要版本 > 2)

问题内容我一直致力于将我们的私有库转换为 go 模块,并且克服了发布和使用库的新主要版本(例如 tssgit.reyrey.com/teschste/go-httpmailer/v3)的最初障碍。 但是,我现在需要发布该库从 v3.0.
添加和使用 Go 模块库次要版本(主要版本 > 2)
2024-02-05

如何给python添加库

要给Python添加库,可以使用pip(Python包管理工具)来安装库。以下是使用pip安装库的步骤:1. 打开命令提示符或终端窗口(Windows用户可以按下Win + R键,然后输入cmd,然后按下回车键来打开命令提示符)。2. 在命
2023-08-09

AndoridSQLite数据库开发中如何为数据库添加添加空表

AndoridSQLite数据库开发中如何为数据库添加添加空表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。AndoridSQLite数据库开发为数据库添加添加空表如果开发
2023-06-05

navicat怎么添加数据库

navicat添加数据库的步骤:打开navicat,选择“新连接”。选择数据库类型(如mysql)。输入连接信息:主机名、端口、用户名、密码。输入连接名称。测试连接,验证成功。保存连接。双击连接名称,展开数据库。Navicat中添加数据库步
navicat怎么添加数据库
2024-04-06

sql怎么添加数据库

在 sql 中添加数据库: 1. 连接数据库服务器,验证用户名和密码; 2. 创建数据库,使用 create database 语句; 3. 断开连接,使用 exit 命令; 4. 验证数据库已创建,使用 show databases 查看
sql怎么添加数据库
2024-05-30

git怎么添加版本库

Git是一种分布式版本控制系统,它可以帮助开发人员管理代码的历史版本,并协同开发项目。添加版本库是Git中非常重要的一个步骤。本文将介绍如何在Git中添加版本库。一、创建版本库要在Git中创建版本库,需要在计算机上创建一个目录并使用Git命
2023-10-22

word字体库如何添加

这篇文章主要讲解了“word字体库如何添加”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“word字体库如何添加”吧!1、首先在网上下载想要使用的字体,将它解压出来。2、解压后,得到字体文件,
2023-07-02

matlab如何添加函数库

要添加函数库到MATLAB中,您可以按照以下步骤操作:1. 找到您要添加的函数库文件。该文件通常是以 .m 文件扩展名结尾的 MATLAB 函数文件。2. 将函数库文件复制到 MATLAB 的工作目录中。您可以在 MATLAB 命令窗口中使
2023-09-14

PyCharm 添加库的完整指南

如何在PyCharm中添加库?详细教程分享在Python开发中,经常会使用第三方库来帮助我们更高效地完成任务。PyCharm作为一款优秀的整合开发环境,为我们提供了便捷的方式来管理和添加库。本文将详细介绍在PyCharm中如何添加库,并附
PyCharm 添加库的完整指南
2024-02-25

visual数据库如何添加数据

要向Visual数据库添加数据,您可以使用INSERT INTO语句。以下是一些基本的步骤:1. 首先,打开Visual数据库管理系统(如Microsoft SQL Server Management Studio)并连接到您的数据库。2.
2023-08-16

编程热搜

目录