Linux探秘坊-------3.开发工具详解(2)

1.动静态库和动静态链接(操作)

  • 静态库是指编译链接时,把库⽂件的代码全部加⼊到可执⾏⽂件中,因此⽣成的⽂件 ⽐较⼤,但在运⾏时也就不再需要库⽂件了。其后缀名⼀般为“.a”

  • 在这里插入图片描述

  • 动态库与之相反,在编译链接时并 没有把库⽂件的代码加⼊到可执⾏⽂件中 ,⽽是在程序执⾏时由运⾏时链接⽂件加载库,这样可以节省系统的开销。动态库⼀般后缀名为“.so”

  • 在这里插入图片描述

静态链接操作:gcc code.o -o mycode -static
在这里插入图片描述

动态链接操作:gcc code.o -o mycode

在这里插入图片描述

2.自动化构建make/makefile

1.初识makefile

  • makefile带来的好处就是⸺⸺“⾃动化编译”,⼀旦写好,只需要⼀个make命令,整个⼯程完全
    ⾃动编译
    ,极⼤的提⾼了软件开发的效率。
  • make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具,⼀般来说,⼤多数的IDE都有这
    个命令,⽐如:Delphi的make,VisualC++的nmake,Linux下GNU的make。可⻅,makefile
    都成为了⼀种在⼯程⽅⾯的编译⽅法。
  • make是⼀条命令makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。

浅浅尝试一下:
1.

在这里插入图片描述
先创建一个code.c并用vim进行编写,再新建一个makefile

在这里插入图片描述
用vim打开makefile,并写入以上内容,

  • 前为要生成的可执行程序的名字,后为源文件(第一行为 依赖关系
  • gcc code.c -o code (第二行为 依赖方式

在这里插入图片描述

make指令完成编译。

在这里插入图片描述
运行也成功

2.具体语法

1.清理代码文件

如果代码文件我不想要了,那怎么清理呢?
在这里插入图片描述
先vim打开makefile,写入红框的内容

  • 第一行表示 clean不依赖于任何文件
  • 第二行为依赖方式

在这里插入图片描述
执行make clean,发现code(可执行文件)已经被删除

在这里插入图片描述

2.依赖关系的推导

在这里插入图片描述
test.c存在,推导结束

在这里插入图片描述

3.完整的makefile语法
1.类似宏替换的操作

在这里插入图片描述

之前我们在makefile里都是直接写文件名的,这里使用 类似宏替换 的方式替换命令和文件,记住,在使用替换时要加上$()

2.多文件统一编译为可执行文件

假如我们的文件非常多,那么上述类似宏替换的方法就不行了,举例:
在这里插入图片描述
模拟100个文件的情况

在这里插入图片描述

我们来依次解释:

在这里插入图片描述
这句话表示,SRC拿到了当前目录里 所有以.c结尾的文件

在这里插入图片描述
这行表示OBJ是由SRC中 所有.c变为.o得来的

在这里插入图片描述

这里的^是指依赖关系中:后的内容@是指:前的内容

在这里插入图片描述
这里%是通配符,:左边匹配所有.c结尾的文件,<表示将展开的所有.c文件,一个接一个地匹配命令,形成.o文件

在这里插入图片描述
每一行最前面的@是指在外面使用make指令时 不显示过程,直接给出结果(可不加)

在这里插入图片描述
我们也可以 自我定制执行某一步骤后,想要输出的提示内容

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

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

相关文章

电脑开机出现Bitlock怎么办

目录 1.前言 2.产生原因&#xff1a; 1.系统异常关机 2.系统更新错误 3.硬件更换 4.CMOS电池问题 5.出厂设置 6.意外情况 3.解锁步骤&#xff1a; 3.1&#xff1a;记住密钥ID&#xff08;前6位&#xff09; 3.2&#xff1a;打开aka.ms/myrecoverykey网址 3.3&#…

C# 的 NLog 库高级进阶

一、引言 在 C# 开发的广袤天地中&#xff0c;日志记录宛如开发者的 “千里眼” 与 “顺风耳”&#xff0c;助力我们洞察应用程序的运行状态&#xff0c;快速定位并解决问题。而 NLog 库&#xff0c;无疑是日志记录领域中的璀璨明星&#xff0c;以其强大的功能、灵活的配置和出…

Avalonia系列文章之小试牛刀

最近有朋友反馈&#xff0c;能否分享一下Avalonia相关的文章&#xff0c;于是就抽空学习了一下&#xff0c;发现Avalonia真的是一款非常不错的UI框架&#xff0c;值得花时间认真学习一下&#xff0c;于是边学习边记录&#xff0c;整理成文&#xff0c;分享给大家&#xff0c;希…

10 为什么系统需要引入分布式、微服务架构

java技术的发展 在java开始流行起来之后&#xff0c;主要服务于企业家应用&#xff0c;例如ERP,CRM等等&#xff0c;这些项目是为企业内部员工使用&#xff0c;我们的思维是怎么用设计模式&#xff0c;如何封装代码。让开发人员关注到业务上去&#xff0c;系统也就那么几十几百…

第6章:Python TDD实例变量私有化探索

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…

JDK 23 和 JDK 21 的区别

JDK 23 和 JDK 21 的区别主要在于支持周期和功能特性&#xff1a; 支持周期&#xff1a; JDK 23&#xff1a;此版本是一个常规发布版本&#xff0c;支持时间较短&#xff0c;通常是六个月。这种版本适合希望使用最新特性和改进的用户。JDK 21&#xff1a;这是一个长期支持&…

springboot自动配置原理(高低版本比较)spring.factories文件的作用

SpringBootApplication public class SpringSecurityApplication {public static void main(String[] args) {SpringApplication.run(SpringSecurityApplication.class, args);}}注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Doc…

使用Websocket进行前后端实时通信

1、引入jar&#xff0c;spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…

vue2 - Day05 - VueX

Vuex 是 Vue.js 官方的状态管理库。它是一个让你能在应用中集中管理共享状态的工具。当应用的规模逐渐增大&#xff0c;组件之间的数据传递变得越来越复杂时&#xff0c;Vuex 就成为了救星&#xff0c;提供了一个集中式的存储来管理所有的组件状态&#xff0c;并且保证状态以一…

中型项目中 HTTP 的挑战与解决方案

一、引言 在当今数字化时代&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;作为Web应用程序的基础通信协议&#xff0c;在中型项目的开发中扮演着至关重要的角色。它为客户端和服务器之间的数据传输提供了标准规范&#xff0c;使得各种类型的应用&#xff0c;从简单的…

IDEA导入Maven工程不识别pom.xml

0 现象 把阿里 sentinel 项目下载本地后&#xff0c;IDEA 中却没显示 maven 工具栏。 1 右键Maven Projects 点击IDEA右侧边栏的Maven Projects&#xff0c;再点击&#xff1a; 在出现的选择框中选择指定的未被识别的pom.xml即可&#xff1a; 2 Add as maven project 右键p…

VUE学习笔记(入门)5__vue指令v-html

v-html是用来解析字符串标签 示例 <!doctype html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…

OSPF的LSA的学习研究

OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图&#xff0c;按照地址表配置&#xff0c;激活OSPF划分相关区域并宣告相关网段 2、1类LSA&#xff0c;每台运行了OSPF的路由器都会产生&#xff0c;描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa&#xff0…

小结:OSPF协议的工作原理

OSPF&#xff08;开放最短路径优先&#xff09;优点&#xff1a; 快速收敛&#xff1a;OSPF的收敛速度较快&#xff0c;能迅速响应网络拓扑变化&#xff0c;并在发生故障后快速更新路由信息。 支持大规模网络&#xff1a;OSPF适合大型网络&#xff0c;可以通过划分区域来减少网…

TypeScript - 利用GPT辅助学习

TypeScript 一、基础1. 安装 TypeScript2. 创建你的第一个 TypeScript 文件3. 编译 TypeScript 代码4. 变量声明与类型注解5. 函数与类型注解6. 总结 二、进阶常用类型1. 类型别名2. 对象类型3. 类型断言4.typeof 操作符 高级类型1. 类2. 交叉类型3. 泛型与 keyof4. 索引签名类…

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…

stm32 no connect target

解决 STM32 报错 “no target connected” 的方法 前言 stm32最小系统在下载程序是一直报错&#xff1a;no target connected&#xff0c;试了很多办法成功不了&#xff0c;最后将芯片擦除了才成功。 一、问题描述 当时是写flash的时候写到ST Link 存储的地方了。 之后就不…

element的el-form-item的prop作用

这个在elemenui中介绍比较简单&#xff0c;一般写的时候照着例子写&#xff0c;会正常运行。没太注意porp到底有啥影响点。这次有点时间整理一下。 这个https://worktile.com/kb/p/3534641链接讲述的要比一般csdn上的文章清晰。 总结&#xff1a; Vue表单验证中的prop属性用于指…

Open3D计算点云粗糙度(方法一)【2025最新版】

目录 一、Roughness二、代码实现三、结果展示博客长期更新,本文最近更新时间为:2025年1月18日。 一、Roughness 通过菜单栏的Tools > Other > Roughness找到该功能。 这个工具可以估计点云的“粗糙度”。 选择一个或几个点云,然后启动这个工具。 CloudCompare只会询问…

窥探QCC518x/308x系列与手机之间的蓝牙HCI记录与分析 - 手机篇

今天要介绍给大家的是, 当我们在开发高通耳机时如果遇到与手机之间相容性问题, 通常会用Frontline或Ellisys的Bluetooth Analyzer来截取资料分析, 如果手边没有这样的仪器, 要如何窥探Bluetooth的HCI log.这次介绍的是手机篇. 这次跟QCC518x/QCC308x测试的手机是Samsung S23 U…