【cmake学习】添加库文件

文章目录

  • 目的
  • 一、原理
  • 二、步骤
    • 1.修改CMakeList
    • 2.main函数如下
    • 3.编译运行


目的

  • 上一篇 学习了使用cmake 构建多源文件工程
  • 在项目开发工程中,一般都会生成库文件或者调用其它的一些库文件,所以我们要学习一下简单生成和使用库文件
  • 这里主要介绍 add_library 生成库文件,使用 target_link_libraries连接库文件

一、原理

  • 在上一篇的基础上进行修改,目录结构如下
    在这里插入图片描述

  • 使用 add_library 把components 目录下的algo和math 源文件封成静态库,然后使用 target_link_libraries 连接生成的静态库,在main 中调用 生成库的接口,查看现象

二、步骤

1.修改CMakeList

代码如下(示例):

# cmake 最低要求版本 3.10,低于此版本将会报错
cmake_minimum_required(VERSION  3.10)# 设置工程名
project(prj_main)#添加头文件路径到 incs中
set(incs include components/match components/algo )#使用 add_library 生成的库,还是用其它路径下的库
set(USE_BUILD_LIB 1)#添加 要编译的源文件 到变量srcs中
# set(srcs main.c components/match/my_match.c )if (USE_BUILD_LIB)#生成库 components.a  SHARED or STATICadd_library(components_lib STATIC components/match/my_match.c components/algo/bubble_sort.c)
endif()# 使用指定的源文件将可执行文件添加到项目中
add_executable(main_exe main.c)
target_include_directories(main_exe PUBLIC ${incs})if (USE_BUILD_LIB)#连接到生成的库 在.build 下target_link_libraries(main_exe PUBLIC components_lib)message(STATUS "use build components_lib")
else()#如果库文件 components_lib 不在默认的库搜索路径下,你可以使用(target_link_libraries 默认从build 目录连接)target_link_libraries(main_exe PUBLIC ${CMAKE_SOURCE_DIR}/lib/libcomponents_lib.a)message(STATUS "use lib libcomponents_lib")
endif()
  • 使用 add_library(components_lib STATIC components/match/my_match.c components/algo/bubble_sort.c) 生成 components_lib 库
  • 使用 target_link_libraries(main_exe PUBLIC components_lib) 连接 库

2.main函数如下

代码如下(示例):

#include <stdio.h>
#include "my_match.h"
#include "bubble_sort.h"
#include "main.h"
int main(void)
{int a = 123;int b = 456;int sort_arr[13] = {4, 5, 4, 3, 178, 4, 12, 54, 3, 15, 4, 35, 1};int sum = my_sum(a, b);//求和int max = CMP_GET_MAX(a, b);// 取最大值printf("sum=%d,max=%d \n", sum, max);bubbleSort(sort_arr, 13);// 排序printArray(sort_arr, 13);// 输出排序结果return 0;
}
  • 其中 my_sum 、bubbleSort、printArray 是 components_lib 里面的接口
  • 查看build 目录下可以看到生成的 libcomponents_lib.a 库文件,是 components_lib 上加了前缀lib和后缀.a
    -在这里插入图片描述

3.编译运行

代码如下(示例):

PS E:\test\TestCMake\cmake_test\3-add_lib\build> make 
[ 20%] Building C object CMakeFiles/components_lib.dir/components/match/my_match.c.obj
[ 40%] Building C object CMakeFiles/components_lib.dir/components/algo/bubble_sort.c.obj
[ 60%] Linking C static library libcomponents_lib.a
[ 60%] Built target components_lib
[ 80%] Building C object CMakeFiles/main_exe.dir/main.c.obj
[100%] Linking C executable main_exe.exe
[100%] Built target main_exe
PS E:\test\TestCMake\cmake_test\3-add_lib\build> .\main_exe.exe
sum=579,max=456 
1 3 3 4 4 4 4 5 12 15 35 54 178

  • 结果输出 求和结果和取最大结果sum=579,max=456 ,
  • 排序结果:1 3 3 4 4 4 4 5 12 15 35 54 178

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

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

相关文章

Docker容器化部署实战:Spring Boot + MySQL + Nginx 一键部署完整指南

📖 前言 容器化技术已经成为现代软件部署的标准实践。作为一名DevOps工程师,我在过去几年中参与了数十个项目的容器化改造,深刻体会到Docker在提升部署效率、环境一致性和运维便利性方面的巨大价值。 今天我将通过一个完整的实战案例,详细展示如何使用Docker部署一个包含…

分布式选举算法<一> Bully算法

分布式选举算法详解&#xff1a;Bully算法 引言 在分布式系统中&#xff0c;节点故障是不可避免的。当主节点&#xff08;Leader&#xff09;发生故障时&#xff0c;系统需要快速选举出新的主节点来保证服务的连续性。Bully算法是一种经典的分布式选举算法&#xff0c;以其简…

高效调试 AI 大模型 API:用 Apipost 实现 SSE 流式解析与可视化

借助 AI 大模型的实时接口&#xff08;如 OpenAI GPT 或其他第三方模型 API&#xff09;&#xff0c;开发者可以通过 SSE&#xff08;Server-Sent Events&#xff09;流式处理数据&#xff0c;实时获取模型的逐步输出。这一技术已广泛应用于实时问答、代码生成等领域。本文将基…

【网络产品经营】园区网络

园区网络的产品经营逻辑发生显著变化&#xff0c;从传统的“连接功能”导向转向“业务体验驱动”&#xff0c;并结合行业场景化需求、技术架构革新及智能化能力提升&#xff0c;形成多维度的产品策略升级。 一、技术架构变革&#xff1a;从多层复杂到极简全光 传统架构的瓶颈与…

EasyExcel 4.X 读写数据

文章目录 EasyExcel与SpringBoot集成读数据读取数据的流程定义实体类简单读取自定义监听器 读取指定sheet和所有sheet多行头读取数据格式转换列表数据实体类自定义转换器自定义监听器数据读取 写数据简单数据写出存储到磁盘返回前端下载 写出指定列宽&#xff0c;和数值精度丢失…

JVM内存管理<一>:Java内存异常问题排查

一、 内存溢出问题的排查 1. 使用工具 - jdk自带 jmapvisualvm 2. 流程 堆转储&#xff1a; (1) 方法一&#xff1a;程序运行时&#xff0c;采用&#xff1a;jmap -dump:formatb,filed:\\data\\xxlJob.hprof 23300 进行堆文件的转储 (2) 方法二&#xff1a;在内存溢出的时候…

Android中Glide.with().load().into() 应付面试源码解析

1. with(this)&#xff1a;生命周期绑定 Glide.with(Activity/Fragment/Context) 核心机制&#xff1a;创建与 UI 生命周期绑定的 RequestManager 底层实现&#xff1a; 通过 RequestManagerRetriever 获取单例 非 Application 上下文&#xff1a; 向 Activity/Fragment 添加…

#### es相关内容的索引 ####

倒排索引 结构 #### es倒排索引的结构 ####-CSDN博客 向量索引 结构应用 #### es向量检索 的 结构及应用_es 向量 文本检索-CSDN博客 ann算法 ann算法的种类有哪些&#xff0c;之间的区别&#xff0c;各自的适用场景-CSDN博客 地理信息索引 es地理信息索引的类型以及geo_po…

小飞电视:智能电视与移动设备的娱乐新选择

在数字娱乐时代&#xff0c;人们对于影视内容的需求日益增长&#xff0c;不仅追求丰富多样的节目选择&#xff0c;还希望获得便捷、个性化的观看体验。小飞电视正是这样一款专为智能电视和移动设备设计的视频娱乐应用&#xff0c;它凭借海量的影视资源、高清流畅的播放效果以及…

删除node并且重装然后重装vue

参考第一篇文章 node.js卸载与安装超详细教程_node卸载重装-CSDN博客 第二篇文章安装vue Vue安装与配置教程&#xff08;非常详细&#xff09;_安装vue-CSDN博客

基于YOLOv10算法的交通信号灯检测与识别

目录 一.&#x1f981; 写在前面1.1 实现模块划分1.2 优化与实时性支持 二.&#x1f981; 相关技术与理论基础2.1 各版本yolo对比2.2 YOLOv10网络结构 三.&#x1f981; 结果分析3.1 训练损失与验证损失分析3.2 精确率&#xff08;Precision&#xff09;、召回率&#xff08;Re…

洪水风险图制作全流程:HEC-RAS 与 ArcGIS 的耦合应用

技术点目录 一、HER-RAS理论二、一维数学模型基本地形导入三、恒定流、非恒定流一维数学模型水流计算四、一维数学模型计算结果分析五、一维数学模型增设构筑物六、二维河道水动力模拟七、HEC-RAS在溃坝模型中的应用八、HEC-RAS在洪水风险图中的应用了解更多 —————————…

视觉大语言模型未能充分利用视觉表征

视觉大语言模型未能充分利用视觉表征 FesianXu 20250612 at Wechat Search Team 前言 这两天看到一篇新挂在arxiv上的文章 [1]&#xff0c;讨论了下视觉大语言模型的视觉表征退化问题。先前的研究将VLM缺陷归咎于视觉编码器薄弱&#xff0c;并提出集成编码器方案以弥补不足&am…

SSRF3 任意文件读取

一.任意文件读取 http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlfile:///etc/passwd 读取文件使用 file://文件路径即可&#xff0c;这里我们换协议为file&#xff0c;然后从根目录开始读取。 /etc/passwd 我们这样修改完url路径后查看结果可以看到文件内…

洛谷P3953 [NOIP 2017 提高组] 逛公园

洛谷P3953 [NOIP 2017 提高组] 逛公园 洛谷题目传送门 题目背景 NOIP2017 D1T3 题目描述 策策同学特别喜欢逛公园。公园可以看成一张 N N N 个点 M M M 条边构成的有向图&#xff0c;且没有 自环和重边。其中 1 1 1 号点是公园的入口&#xff0c; N N N 号点是公园的出…

Vue3+TypeScript+Element Plus 表格展开行优化方案

在 Vue3 TypeScript Element Plus 项目中优化表格展开行的内存使用&#xff0c;主要从 渲染优化、数据管理 和 内存回收 三方面入手。以下是最佳实践和完整解决方案&#xff1a; 1. 懒加载展开内容&#xff08;核心优化&#xff09; 只当行展开时才渲染内容&#xff0c;避免…

OpenCV——直方图与匹配

直方图与匹配 一、直方图简介二、直方图统计三、直方图比较四、直方图均衡化五、自适应的直方图均衡化六、直方图反向投影七、模板匹配 一、直方图简介 图像直方图&#xff08;Histogram&#xff09;是一种频率分布图&#xff0c;它描述了不同强度值在图像中出现的频率。图像直…

通义大模型在文档自动化处理中的高效部署指南(OCR集成与批量处理优化)

1. 传统OCR解决方案常面临识别精度低、版面分析能力弱、处理效率瓶颈等问题。通义大模型凭借其多模态理解和生成能力&#xff0c;为文档处理领域带来革命性突破。本文将深入探讨如何高效部署通义大模型实现端到端的文档自动化处理&#xff0c;特别聚焦OCR集成与批量处理优化两…

Ubuntu20.04通过ssh协议配置远程终端

一、在目标计算机&#xff08;即被连接的计算机&#xff09;上操作&#xff1a; 1、安装 OpenSSH 服务器&#xff1a; sudo apt update sudo apt install openssh-server3、启动并设置 SSH 服务开机自启&#xff1a; sudo systemctl enable --now ssh二、在源计算机&#xf…

《HTTP权威指南》 第7章 缓存

带着问题学习&#xff1a; 缓存如何提高性能如何衡量缓存的有效性缓存置于何处作用最大HTTP如何保持缓存副本的新鲜度缓存如何与其他缓存及服务器通信 web缓存是可以自动保存常见文档副本的HTTP设备。 缓存优点 减少冗余的数据传输&#xff0c;节省网络费用缓解网络瓶颈问题&…