cmake 添加一个库
目录
项目格式
cmake基本语法
设置编译器
添加库
链接库
添加库的头文件
cmake打印字符串
库的cmake文件
cmake生辰库
mian函数中使用
让库成为可选的
cmake基本语法
设置option变量
cmake设置条件链接库
链接库
添加头文件
修改cmake配置文件
修改引用的源码
更新链接库的过程
${CMAE_CURRENT_SOURCE_DIR}
项目格式
Step2
mathFunctions/CMakeLists.txt mysqrt.cxx MathFunctions.h
CMakeList.txt
tutorial.cxx
Tutorial.h.in
cmake基本语法
设置编译器
set (CMAKE_C_COMPILER "D:/Program Files/LLVM/bin/gcc")set (CMAKE_CXX_COMPILER "D:/Program Files/LLVM/bin/g++")
CMAKE_C_COMPILER C语言编译器,CMAKE_CXX_COMPILER C++编译器。
添加库
add_subdirectory(MathFunctions)
添加的MathFunctions就是文件夹的名字也可以理解为库的名字
链接库
target_link_libraries(Tutorial PUBLIC MathFunctions)
第一个参数是生成的可执行文件,中间的是公有的,第三个参数是库的名字.
添加库的头文件
target_include_directories(Tutorial PUBLIC ${PROJECT_SOURCE_DIR}/MathFunctions ${PROJECT_BINARY_DIR})
第一个参数是生成的可执行文件,中间的是公有的,第三个参数是库的路径,应该说后面的参数都是路径.
其中:
${PROJECT_SOURCE_DIR} 这个变量是主Cmake文件的变量
${PROJECT_BINARY_DIR}这个变量是cmake -B生成的路径的变量
cmake打印字符串
message("hello world")
message(${PROJECT_SOURCE_DIR}/MathFunctions)
这个就是打印出来的字符串.
库的cmake文件
这个cmake文件不需要写那么多公共命令.
cmake生辰库
add_library(MathFunctions mysqrt.cxx)
这行代码就是把cxx文件添加到库中
mian函数中使用
添加头文件
#include <MathFunctions.h>
可以直接使用尖括号,因为cmake已经把头文件添加到可执行文件中了.
然后直接调用函数即可.
让库成为可选的
cmake基本语法
设置option变量
option(USE_MYMATH "Use tutorial provided math implementation" ON)
设置一个USE_MATH的变量,第二个参数是说明字符串,第三个是启动或者关闭 ON是启动,OFF是关闭.
注意:option这个设置变量一定要在configure_file(TutorialConfig.h.in TutorialConfig.h)这行前面才可以,要不然option设置的不起作用.
cmake设置条件链接库
if (USE_MYMATH)add_subdirectory(MathFunctions)list(APPEND EXTRA_LIBS MathFunctions)list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR})
endif()
意思是如果USE_MYMATH为ON才可以链接自己的库
其中强调两行代码就是list的代码
list(APPEND EXTRA_LIBS MathFunctions)
list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR})
这两行代码你可以理解为依赖的库声明成一个变量列表,例如EXTRA_LIBS这个变量就是存储的MathFunctions这个库这里只有一个demo如果要链接十个八个只要在list后面空格添加就行,
EXTRA_INCLUDES这个也是同理,目的也是为了下面添加链接库和添加头文件的时候简单一点.
链接库
target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})
这里就用到EXTRA_LIBS 这个列表
添加头文件
target_include_directories(Tutorial PUBLIC ${EXTRA_INCLUDES}${PROJECT_BINARY_DIR})
这里就用到EXTRA_INCLUDES这个列表
修改cmake配置文件
#cmakedefine USE_MYMATH
添加一行这个代码
USE_MYMATH这个变量就是对应一开始的option设置的变量
如果option设置USE_MYMATH为ON, cmake配置文件生成的头文件就会定义USE_MYMATH
这个不是自己写的是cmake自己生成的.
修改引用的源码
更新链接库的过程
如果每次主cmake文件每次链接一个库都要target_include_directories一个库名字就有点重复,所以可以修改cmake库来实现当链接这个库的时候就包含头文件了。
第一步就是修改库的cmake文件:
add_library(MathFunctions mysqrt.cxx)target_include_directories(MathFunctionsINTERFACE${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(MathFunctions
INTERFACE
${CMAKE_CURRENT_SOURCE_DIR})
第一行代码是添加库名字,第二行是添加库的头文件,第一个参数是库的名字,
INTERFACE:第二个参数意思是当链接这个库的时候就要包含include第三个参数的头文件,但是自己的库不使用头文件,
还有一个PUBLIC:
PUBLIC:这个的意思是不光链接这个库的需要使用库头文件,自己也是用。一般这个使用的比较多。
第三个参数就是头文件的路径,
${CMAE_CURRENT_SOURCE_DIR}
这个变量是什么意思了?这个意思是当前cmake文件的目录,这个变量和${PROJECT_SOURCE_DIR}这个变量比较相似,这个是指定项目当前的路径。
主cmake文件就可以把上面链接MathFunctions文件可以删除了。
相关文章:

cmake 添加一个库
目录 项目格式 cmake基本语法 设置编译器 添加库 链接库 添加库的头文件 cmake打印字符串 库的cmake文件 cmake生辰库 mian函数中使用 让库成为可选的 cmake基本语法 设置option变量 cmake设置条件链接库 链接库 添加头文件 修改cmake配置文件 修改引用的源码…...
代码随想录二刷 226 翻转二叉树 102 二叉树的层序遍历 101 对称二叉树
226 翻转二叉树 代码如下 func invertTree(root *TreeNode) *TreeNode { if root nil { 采用前序遍历,如果当前节点为空,就返回空 return nil } root.Left,root.Right root.Right, root.Left 交换该节点的…...
【深入浅出C#】章节 3: 控制流和循环:条件语句
条件语句是编程中一种常用的控制结构,用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径,使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为,使程序能够根据不同的情况…...

Java框架学习--Spring
1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的(基本)装置。--来自百度百科 之前常见的容器有: List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…...
【爬虫】Xpath和CSS信息提取的方法异同点
类似点: Xpath与css都有web页面定位元素的功能Xpath与css结构类似 区别: 1. Xpath比较强大,而css选择器在性能上更优,运行速度更快,语法更简洁 CSS再chrome,火狐查找速度快,效率高࿰…...

数字IC前端学习笔记:FIFO的Verilog实现(二)
相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…...
2.2 搭建Spark开发环境
一、Spark开发环境准备工作 由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。 安装Spark集群前…...

webpack指定输出资源的路径和名称
如图,在前面的章节我们打包后的文件默认都输出到了dist目录下,无论是图片、还是js都在同一级别目录,这里目前处理的资源比较少,如果资源一多,所有的资源都在同一级目录,看起来很费劲。 那么这节就介绍一下…...
Spring事务四
spring 事务的隔离级别 当多个事务同时访问数据库中的同一数据时,可能会出现数据不一致的情况,为了避免这种情况发生,就需要使用事务隔离机制。Spring框架中定义了5种事务隔离级别,分别为: DEFAULT(默认隔…...

项目管理专业人员能力评价等级证书(CSPM)的级别介绍
2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…...
设计模式-创建型模式(单例、工厂、建造、原型)
Concept-概念前置 设计模式:软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 面向对象三大特性:封装、继承、多态。 面向对象设计的SOLID原则: (1)开放封闭原则&#…...

用饭店来形象比喻线程池的工作原理
一、线程池解决的问题? 使用线程池主要解决在程序中频繁创建和销毁线程导致的资源浪费,线程池可以维护一定量的线程来执行所需要的任务,维护的线程也可以重复使用。 二、用形象的饭店来解释工作原理 线程池就相当于一家饭店, 任…...
GO学习笔记之表达式
GO学习笔记之表达式 保留字运算符优先级二元运算符位运算符自增指针 保留字 Go语言仅25个保留关键字(keyword),这是最常见的宣传语,虽不是主流语言中最少的,但也确实体现了Go语法规则的简洁性。保留关键字不能用作常量…...

005Mybatis返回值(ResultMap 一对多,多对多)
属性 id 应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以…...

把玩数据在内存中的存储
前言:时光如梭💦,今天到了C语言进阶啦😎,基础知识我们已经有了初步认识, 是时候该拔高拔高自己了😼。 目标:掌握浮点数在内存的存储,整形在内存的存储。 鸡汤:…...

Nginx运行原理与基本配置文件讲解
文章目录 Nginx基本运行原理Nginx的基本配置文件serverlocationroot 与 alias 的区别server 和 location 中的 rootnginx欢迎页 本文参考文章Nginx相关文章 Nginx基本运行原理 Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个…...

openGauss5 企业版之SQL语法和数据结构
文章目录 1.openGauss SQL 语法2. 数据类型2.1数值类型2.2 布尔类型2.3 字符类型2.4 二进制类型2.5日期/时间类型2.6 几何类型2.7 网络地址类型2.8 位串类型2.9 文本搜索类型2.10 UUID数据类型2.11 JSON/JSONB类型2.11 HLL数据类型2.12 范围类型2.13 索引2.14 对象标识符类型2.…...

TClientDataSet 模拟 EXCEL表
日常处理数据时,经常需要,从EXCEL表格中,批量导入数据,通过 XLSReadWriteII编程,会很快导入。 但是,客户提供的EXCEL表的字段,数据格式,字段的排序,有很大的区别。因此&a…...

Hazel游戏引擎(012)GLFW窗口事件
文中若有代码、术语等错误,欢迎指正 文章目录 前言如何确定GLFW窗口事件的回调函数参数Application接收事件回调流程原项目流程(12345)自己写的简单Demo与流程(123) 前言 此节目的 为了完成008计划窗口事件的接收glfw窗口事件以及回调部分 此节要完成 使用glfw函数…...
Nenu算法复习第六章
目录 补充知识点 1160: 6001 第几天? 1161: 6002 时间格式转换 1162: 6003 星期几? 1163: 6004 18岁生日、 补充知识点 闰年的判断方法: 能被四整除但是不能一百整除或者能被400整除 例题: 题目描述 经常会有人问你怎么判断闰年&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...