首页 > 其他分享 >cmake学习笔记

cmake学习笔记

时间:2024-10-22 09:48:30浏览次数:6  
标签:类库 文件 cmake 静态 笔记 学习 二进制 hello

最近在学cmake的用法,参考了cmake使用详细教程(日常使用这一篇就足够了)这篇文章,这篇文章讲的很仔细,下面记录自己的学习过程。

1、系统以及开发工具

一开始想通过虚拟机安装Ubuntu和vscode,后面想到了之前本机Windows安装过wsl,wsl的就是Ubuntu,在wsl+本地vscode的开发下,很快就把文章提到的几个demo实现了,也对cmake有了进一步的了解。

2、cmake简单配置

image

image

image

在项目的当前目录输入cmake .,输出如下结果:
image
接着输入 cmake,输出如下结果
image
最后执行二进制文件./hello
image

3、cmake配置多个头文件以及源文件路径

Demo2有多个头文件路径,以及多个源文件路径如何配置,这个和vs的vc++配置头文件和源路径是一样的,新加了一个build目录,在这个目录里面执行cmake .. ,cmake 后面的.. 是CMakeLists.txt所在的目录,cmake找到CMakeLists.txt生成项目文件
image

4、cmake配置生成类库

Demo3没用main函数,是用来做一个给其他项目调用的类库,可以生成静态库和动态库,c++静态库是和二进制打包到一起去了,动态库是独立的一个so文件。根据自己情况是需要静态库还是动态库。
image

5、cmake配置使用类库

假设Demo3封装了一个自己需要的函数,那么就需要在其他项目使用该函数,Demo4通过cmake的配置文件来使用该库
image

5.1 使用静态库

image

我们编译完以后可以通过ldd hello查看依赖库发现并没有libmyfunc.a,但是该二进制文件是可以执行的。
image

这个查看hello二进制文件的大小16640字节
image

5.2 使用动态库

image

我们编译完通过ldd hello查看发现有依赖libmyfunc.so
image

查看hello的文件大小16608字节,说明比静态文件的小,引用静态库文件较大是因为hello包含了libmyfunc.a,动态库则没有包含,通过环境变量去找该依赖库,找打了则可以运行,找不到就会报错。
image

标签:类库,文件,cmake,静态,笔记,学习,二进制,hello
From: https://www.cnblogs.com/dx5800/p/18489111

相关文章

  • 强化学习的数学原理-02贝尔曼公式
    目录MotivatingexamplesstatevalueBellmanequationMatrix-vectorformActionvaluesummaryMotivatingexamples一个核心概念:statevalue一个基本的工具:Bellmanequation为什么return是重要的?return可以用来评估policy下面计算3个例子计算return的方法:第一种方法:(......
  • 机器学习基础模型选择
    最近邻适用于小型数据集,是很好的基准模型,很容易解释。线性模型非常可靠的首选算法,适用于非常大的数据集,也适用于高维数据。朴素贝叶斯只适用于分类问题。比线性模型速度还快,适用于非常大的数据集和高维数据。精度通常要低于线性模型。决策树速度很快,不需要数据缩放,可以可......
  • 人工智能学习框架:构建与训练AI模型的基础工具
    人工智能学习框架:构建与训练AI模型的基础工具人工智能(AI)学习框架是构建和训练AI模型的基础工具,它们提供了一组预定义的算法、函数和工具,使得开发者能够更快速、更高效地构建AI应用。这些框架通常包括一系列的库、工具和接口,涵盖了机器学习、深度学习等多个领域。本文将详细......
  • Elasticsearch应用与源码的学习方法是什么?
    学习Elasticsearch的应用与源码,可以按照以下步骤进行:入门基础:首先,可以通过官方文档或一些入门教程来了解Elasticsearch的基本概念和功能。例如,可以参考《Elasticsearch入门教程》 和《ElasticSearch入门篇(保姆级教程)-coderxz-博客园》。这些资源会介绍Elasticsearch的......
  • JAVA中的JDBC学习总结 我的学习笔记
    JDBC学习总结我的学习笔记一、JDBC简介一、JDBC快速入门一、JDBCAPI详解1.DriverManager2.Connection3.Statement4.ResultSet5.PreparedStatement一、数据库连接池1.数据库连接池简介2.数据库连接池实现3.Druid数据库连接池一、JDBC简介1.JDBC概念JDBC就......
  • MySQL数据库总结 我的学习笔记
    MySQL数据库总结一、数据库相关概念1.数据库2.数据库管理系统3.SQL4.常见的关系型数据库管理系统二、MySQL数据库1.MySQL目录结构2.MySQL数据模型三、SQL1.SQL简介2.SQL通用语法3.SQL分类4.DDL(数据定义)操作数据库操作表MySQL数据类型5.DML(数据操作)添加(insert)修改......
  • 《程序员修炼之道:从小工到专家》阅读笔记2
    作为程序员,我们的代码应当尽量避免重复,因为重复的知识如果矛盾,那么计算机将无法完成它的工作。维护的时候,过程和程序的重复十分让人头疼。系统中的每一项知识都必须单一,无歧义,权威的表示。重复主要有:强加的重复,无意义的重复,无奈的重复,开发者之间的重复。让一个系统具有“正交性”......
  • LLM学习-基础知识
    NLPNLP代表自然语言处理,是关于计算机和人类语言之间交互的领域。NLP涵盖了一系列任务,包括文本处理、语音识别、语言翻译、信息检索等。NLP技术的发展使得计算机能够理解、解释和生成人类语言,促进了许多领域的发展,包括智能助手、文本分析、情感分析等。LLMLLM指的是大型语言模型......
  • C语言学习笔记4
    函数函数是一组一起执行一个任务的语句。每个C程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。C语言的函数分为:1.库函数2.自定义函数对于库函数引用对于头文件即可使用,自定义函数需要自己调用与声明函数的调用与声明C语言中的函数......
  • 10.21学习
    1.格式说明符中的%2s在C语言中, %2s 是一个格式说明符,用于 scanf 、 fscanf 、 sscanf 等输入函数中。它指定了函数应该读取的字符串的最大长度。具体来说: % :表示开始一个格式说明符。 2 :指定要读取的字符的最大数量,这里是2个字符。 s :表示要读取的数据......