构建生成工具cmake的使用(2)

news2025/1/19 11:16:43

一.制作库文件

Linux下动态库是以 .lib开头,以 .so为结尾。静态库以 .lib 开头,.a为结尾。                                  Windows下动态库以dll为结尾,以 .lib为结尾

1.1.cmake编写生成动态库

我们想把add.cc和sub.cc打成一个动态库 

执行cmake  ./和make指令

linux下掐头去尾就是真正的库的名称。和编写cmake时候project(xxx)中是一样的。

1.2.cmake编写生成静态库

现在我们试验一下cmake编写生成静态库

 

1.3.指定生成库的路径

动静态库就是源文件的二进制版本,怎么指定动静态库生成后存放在哪里呢?                              有一个宏是 LIBRARY_OUTPUT_PATH,这个宏保存了生成的库存放在哪里,用set给这个宏赋值,若不指定默认在cmake跟的路径下,若指定的路径不存在会递归生成。

  

二.cmake执行期间输出日志

 如果想在cmake执行期间输出某些内容或者日志,可以借助message

message(STATUS|WARNING|AUTHOR_WARNING|SEND_ERROR|FATAL_ERROR  xxxx)
STATUS: 普通消息。
WARNING:显示警告消息。
AUTHOR_WARNING:显示警告消息。
SEND_ERROR:显示错误消息
FATAL_ERROR:显示严重错误消息并停止配置过程
如果默认不指定等级,就代表很重要

我们在编写cmake文件时加上这些日志内容。 

 

 我们来验证一下假如日志等级为 FATAL_ERROR会不会中断构建。

 

 

可以发现确实停止了构建。 

三.字符串的操作

有时候编译一个程序所需要的源文件不在一个目录下,如果通过file命令对各个目录下源文件进行搜索,可能最后还要做一个拼接/移除操作。                                                                                    举个例子:比如在编写一个动态库的时候,用file查找目录下的所有.cc文件,查找后如果里面有一个main,cc是我们制作这个动态库所不需要的,就要对他进行移除,这种情况就需要用到字符串操作函数。

3.1.字符串的拼接

字符串的拼接可以使用 set 和 list                                                                                              

set(变量名  变量列表)
因为cmake下一切皆字符串。将变量列表下的所有值拼接在一起并将结果存储在第一个变量中,如果第一个变量中有值会直接覆盖。

list(APPEND  变量名 变量列表)
list和set其实大差不差,list第一个参数填写APPEND代表我要做拼接操作。这是因为list还有很多其他用途,并不是只像set一样只能进行拼操作,list的其他操作下面会讲到。

将和 CMakeLists.txt 同目录下的所有源文件的绝对路径存储在str1中,定义两个变量:str2和str3,再分别使用set和list拼接字符串。再使用message在构建时打印出来。

这里要特殊说明一下,用 set 和 list 拼接的字符串,在存储时会用分号(;)作为每个变量的分隔符。但是打印时候是不会显示出分号(;)的,这是因为方便list的其他操作的进行。下面举个例子说明一下:

比如用list拼接了几个字符串
list(APPEND str hello world Linux Windows)
实际在存储时str是这样存储的, hello;world;Linux;Winodws(set同理)
这样做是为了方便进行其他字符串操作,比如要在str查找有没有 helloworld 这个变量,其实是没有的,因为只有hello和world,并没有连在一起的。

3.2.list的其他字符串操作

list除了可以拼接字符串外,还可以移除, 获取长度, 搜索等。这里介绍几个最常用的list的功能。

3.2.1.list获取变量的长度

list(LENGTH 变量 存储变量列表长度的变量)
LENGTH是list用来获取长度的子命令,获取的长度是指变量中有几个变量,不是字符串长度总和。

 3.2.2.读取列表中的指定索引元素

list(GET 变量名称 索引编号 存储对应索引的变量)
GET是list用来获取对应下标元素的子命令。索引编号可以有多个,索引编号可以是从0开始,也可以是从-1开始。出了索引长度就会报错。
   
   abc  bcd  cde  efg
    0    1    2    3
   -4   -3   -2   -1
   

 

3.2.3.变量中的元素用连接符连接组成字符串

list(JOIN 变量 连接符 存储返回的字符串)
JOIN是list的连接子命令,比如连接符为xxx,变量为 abc bcd cde
则存储连接后的字符串为 abcxxxbcdxxxcde

3.2.4.查找变量中是否存在指定元素

list(FIND 变量 要查找的元素 存储结果)
如果找到了就返回下标,没有找到就返回-1

3.2.5.在指定下标插入若干元素 

list(INSERT 变量 下标 插入的若干元素)

 

3.2.6.删除指定变量中的元素

list(REMOVE_ITEM 变量 要删除的元素)

 

3.2.7.删除指定下标元素

list(REMOVE_AT 变量 下标)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 3.x Rest API最佳实践之统一响应结构

上一篇:Spring Boot 3.x Rest API最佳实践之API实现 下一篇:Spring Boot 3.x Rest API统一异常处理最佳实践 前面我们完成了电商示例API的设计和简单实现,本小节在此基础上完成统一响应结构的实战。 文章目录 定义Response响应体拦截Rest A…

【Day04】0基础微信小程序入门-学习笔记

文章目录 基础加强学习目标自定义组件1. 创建与引用2. 样式3. 数据、方法和属性4. 数据监听器5. 纯数据字段6. 组件生命周期6.1 created6.2 attached(使用最多)6.3 detached6.4 定义生命周期函数 7. 组件所在页面的生命周期7.1 定义使用7.2 生成随机的RG…

【QGroundControl二次开发】九. QGC地面站替换自定义MAVLINK协议

一. 生成自定义mavlink协议 具体操作参考之前文章->【QGroundControl二次开发】四.QGC自定义MAVLink消息 -------------------------下面为具体操作--------------------------- 在mavlink源码下的mavlink-master\message_definitions\v1.0\common.xml加入自定义协议&…

(javaweb)请求响应postman

目录 一.请求响应概述 二.请求参数的接收及封装 1.postman 2. 简单参数 3.实体参数 4.数组集合参数 5.日期参数 6.JSON参数 二.设置响应数据 一.请求响应概述 1.Tomcat又称为servlet容器 前端浏览器发起请求携带http请求数据,web服务器负责请求协议的解析&a…

网站开发涉及到的技术内容介绍——后端PHP(1)

一、PHP简介 PHP(全称:Hypertext Preprocessor (超文本预处理器))是一种创建动态交互性网站的服务器端脚本语言( PHP代码可以放在HTML文档中的任何位置;且PHP 脚本是在服务器上运行,然后将纯 HTML 结果发送回浏览器)且PHP 是免费的,并且使用非常广泛。同类的后端语言有…

Element学习(布局组件、案例操作)(4)

1、页面整体的布局 2、找到这种布局对应的代码&#xff08;复制——>粘贴到标签<div>中&#xff09; <el-container><el-header>Header</el-header><el-container><el-aside width"200px">Aside</el-aside><el-main…

8.8C++作业

在类结构体中&#xff0c;运用 成员函数或友元函数 实现算术运算符重载 #include <iostream>using namespace std;class Stu {friend const Stu operator/(const Stu &R,const Stu &L);friend const Stu operator%(const Stu &R,const Stu &L); private…

【2024年电赛H题自动行驶小车】省一学长手把手从零教你学MSPM0

一、前前言 第十二届浙江省大学生电子设计竞赛终于落下帷幕了&#xff0c;名单已公示&#xff0c;几家欢喜几家愁&#xff1f;我觉得每一位经历过电赛的朋友都称得上英雄&#xff0c;我想我们所学到的并非是“省一等”或“成功参赛奖”一个头衔能囊括的&#xff0c;相信真正有…

一篇带你了解kickstart无人值守以及pxe实现服务器自动部署

目录 使用背景 pxe原理 一、kickstart无人值守实验 实验环境&#xff1a; kickstart脚本制作&#xff1a; http服务 DCHP服务 定位需要装的机器上&#xff08;已使用光盘&#xff09; 二、PXE实验 实验环境&#xff1a;在上个实验环境的基础上 使用已经做好的dhcp&am…

Type-C取电芯片LDR6500

在当今电子设备日新月异的时代&#xff0c;Type-C接口以其高效、便捷的特点迅速成为市场主流。这一接口不仅支持高速数据传输&#xff0c;还实现了正反插拔的便利性&#xff0c;极大地提升了用户体验。然而&#xff0c;在Type-C接口的广泛应用背后&#xff0c;一个关键的技术组…

数模评价类—【主成分分析法】

目录 文章目录 前言 一、主成分分析法是什么&#xff1f; 二、模型原理 三.实现步骤 1.x标准化处理 2.计算标准化样本后的协方差矩阵/样本相关系数矩阵 3.计算R的特征值&#xff08;入&#xff09;和特征向量 4.计算主成分贡献率和累计贡献率 5.写出主成分 总结 前言…

【物联网设备端开发】使用QEMU模拟ESP硬件运行ESP-IDF

目录 一&#xff0c;开发环境搭建 1.1 安装ESP-IDF 1.2 安装vscode插件 1.3 在ESP-IDF插件配置ESP-IDF开发配置 1.4 下载IOTDeviceSDK 设备端开发代码 1.5 通过ESP-IDF插件编译好镜像 1.6 构建QEMU docker镜像 1.7 使用QEMU容器运行镜像 二&#xff0c;搭建QEMU环境步…

CS531 Virtualization

MLFQ copy and change address translation Segmentation TLB multilevel page

Qt实现中英文切换中QMessageBox中的中文信息怎么处理

有粉丝看了《Qt实现中英文切换》文章后&#xff0c;留言说“中英文切换中QMessageBox中的中文信息怎么处理”&#xff0c;这篇文章就告诉你处理方法。 1&#xff0c;QMessageBox OK或Cancel提示语句 QMessageBox::information(this, QString::fromLocal8Bit("测试")…

达林顿管uln2004a参数及其功耗计算

特点&#xff1a; 单输出集电极电流500mA高电压输出 50V有输出钳位二极管达林顿晶体管阵列。每个由七个组成NPN达林顿对&#xff0c;具有高压输出与共阴极钳位二极管开关感性负载。单个达灵顿对的集电极额定电流为500mA。达林顿对可以并联&#xff0c;以获得更大的电流能力 应…

【LVS】部署NAT模式集群

一、实验环境 每台主机的防火墙和SELinux都要关掉 systemctl stop firewalld setenforce 0 client&#xff08;测试机&#xff09;&#xff1a; ip 172.25.254.50 lvs&#xff08;调度器&#xff09;&#xff1a; vip 172.25.254.100 dip 192.168.0.100 RS1&#xff08;真实服…

2025深圳国际户外棋牌游戏休闲娱乐展览会

2025深圳国际户外棋牌游戏休闲娱乐展览会 2025 Shenzhen International Outdoor Chess Card Games, Leisure and Entertainment Exhibition 时间&#xff1a;2025年02月27-3月01日 地点&#xff1a;深圳会展中心&#xff08;福田馆&#xff09; 详询主办方陆先生 I38&…

LeetCode.3131.找出与数相加的整数I

题目描述&#xff1a; 给你两个长度相等的数组 nums1 和 nums2。 数组 nums1 中的每个元素都与变量 x 所表示的整数相加。如果 x 为负数&#xff0c;则表现为元素值的减少。 在与 x 相加后&#xff0c;nums1 和 nums2 相等 。当两个数组中包含相同的整数&#xff0c;并且这…

C语言结构体初识(变量定义初始化和传参)

结构体类型的声明 结构体是一些值的集合&#xff0c;这些值被称为成员变量&#xff0c;结构体的每个成员可以是不同类型的变量。而数组却是一些相同类型元素值的集合。 声明&#xff1a; struct tag {member-list; 成员变量的列表 }variable-list; 结构体变量 -》是全局变量…

Python写UI自动化--playwright(输入框操作)

get_by_placeholder 允许我们根据输入框的 placeholder 属性来查找元素。这对于使用占位符文本作为提示的输入框非常有用。 如上图&#xff0c;导航百度一下--登录操作&#xff0c;对账号和密码输入框进行检查&#xff0c;在源码页面会看到类似&#xff1a;placeholder"手…