当前位置: 首页 > article >正文

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.kler.cn/a/512831.html

相关文章:

  • 内存 管理
  • 资料03:【TODOS案例】微信小程序开发bilibili
  • HTML<img>标签
  • 函数递归的介绍
  • 7. 计算机视觉
  • ARCGIS国土超级工具集1.3更新说明
  • Spring Event和MQ的区别和使用场景
  • Java JDK17 API 离线文档下载
  • 【深度学习项目】语义分割-DeepLab网络(DeepLabV3介绍、基于Pytorch实现DeepLabV3网络)
  • ubuntu下,模仿安装vllm,仅记录
  • android如何将字符串\u83b7\u53d6\u6210\u529f转换成中文
  • Mac安装配置使用nginx的一系列问题
  • 一文大白话讲清楚webpack基本使用——3——图像相关loader的配置和使用
  • 摘录人工智能面试笔试题汇总
  • 文档解析:PDF里的复杂表格、少线表格如何还原?
  • 对人型机器人的研究和展望
  • 提升前端性能的JavaScript技巧:让你的网站飞一般的流畅
  • 【C++指南】类和对象(九):内部类
  • 【JAVA】最新jdk23下载安装
  • Java Web开发高级——消息队列与异步处理
  • 整体隔离版全链路压测
  • TaskBuilder触发前端组件请求后台服务的常见事件
  • 人工智能核心知识:AI Agent的四种关键设计模式
  • 【深度学习】Java DL4J基于多层感知机(MLP)构建公共交通优化模型
  • 如何使用MaskerLogger防止敏感数据发生泄露
  • cherry-pick使用