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

编译器-gcc/g++和自动化构建-make/Makefile

编译器gcc/g++

复习程序翻译

程序翻译需要经过4个过程:

预处理(进行宏替换/去注释/条件编译/头文件展开等)、

编译(生成汇编)、

汇编(生成机器可识别代码)、

链接(生成可执行文件或者库文件):把.o文件与库文件进行链接,生成可执行文件。

动态库和静态库 

在Linux中命名特征,动态库(libxxxx.so)、静态库(libxxxx.a)。

windows中命名特征,动态库(xxxx.dll)、静态库(xxxxx.lib)。

现在有个.c文文件,编译的时候我们分别采用动态链接(默认)和静态链接(加上-static选项),会发现静态链接比动态链接的大小要大得多,但是liunx一般只会存在动态库没有静态库,要想使用静态库就要使用命令install glibc-static libstdc++-static -y。

 因为静态链接方式是把我们要的库方法实现,直接拷贝到可执行程序中,而动态链接是在需要执行这个库函数的时候跳转到这个库里面去执行,所以文件大小上面会有差异。

自动化构建-make/Makefile

make是一个命令,makefile是一个文件

核心思想

在这个makefile文件中第一行就是依赖关系,第二行就是依赖方法,makefile的核心思想就是根据依赖关系和依赖方法形成可执行文件。

具体语法

1、makefile生成可执行文件之后还要把它清理掉,在依赖关系和依赖方法的后面加上:

 2、make会定顶向下扫面makefile文件,默认形成第一个目标文件,如果想指定形成,在使用make命令时,后面就要加上目标文件。

3、.PHONY修饰clean叫做伪目标,伪目标所依赖的方法总是会被执行。

4、而为了提高编译效率,非伪目标被执行一次后如果依赖文件没有变化是不会执行第二次的,那么他是如何做到的呢?

5、makefile会进行依赖关系的推导,直到依赖文件是存在的,推导原则如下。

6、更加具有通用型的makefile。

7、以上是当前目录下只有一个 源文件,那要是当前目录有成百上千个源文件发呢?

于是makefile就变成这样了:

解释:

1、SRC=$(wildcard *.c)的意思就是,把所有的.c文件放在SRC里面,SRC里面的内容也可以写成$(shell ls *.c)。

2、OBJ=$(SRC:.c=.o)的意思就是,把SRC里面的文件的.c后缀变成.o后缀,然后放入到OBJ里面。

3、$^代表依赖文件列表,$@代表目标文件名。

4、%.o:%.c,其实%在makefile里面就是一个通配符。%.c会展开成多个文件,$<就会把展开的多个.c一个一个的交给这个命令,然后一个一个形成.o,其实$<就是把一批文件,一个一个的拿出来,经过该方法加工成同名.o文件。

5、如果不想再屏幕上回显,那就要再依赖方法前面加上@。

http://www.xdnf.cn/news/16193.html

相关文章:

  • AI冲击搜索?谷歌说:恰恰相反
  • C语言第 9 天学习笔记:数组(二维数组与字符数组)
  • 优秀案例:基于python django的智能家居销售数据采集和分析系统设计与实现,使用混合推荐算法和LSTM算法情感分析
  • Java 大视界 -- 基于 Java 的大数据分布式存储在工业互联网数据管理与边缘计算协同中的创新实践(364)
  • 矩阵谱分解的证明及计算示例
  • JVM相关面试八股
  • 虚拟机docker elasticsearch启动失败
  • Elasticsearch-ik分析器
  • 三维图像识别中OpenCV、PCL和Open3D结合的主要技术概念、部分示例
  • Java设计模式-代理模式
  • 《Angular+Spring Boot:ERP前端采购销售库存协同架构解析》
  • FalconFS: Distributed File System for Large-Scale Deep Learning Pipeline——论文阅读
  • ReVQ (Quantize-then-Rectify,量化后修正)
  • [MMU] Table walk flow详解
  • IAR编辑器如何让左侧的工具栏显示出来?
  • MCP工具开发实战:打造智能体的“超能力“
  • GaussDB 逻辑备份实操
  • windows11安装wsl装Ubuntu到D盘及可视化页面,安装docker及宝塔面板
  • 初识opencv03——图像预处理2
  • Day 20:奇异值SVD分解
  • Python Day15 面向对象核心特性笔记 及 例题分析
  • 数组toString方法及类型检测修复方案
  • Linux 内核基础统简全解:Kbuild、内存分配和地址映射
  • 【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍
  • 同花顺前端潜在面试题目与答案
  • 星慈光编程虫2号小车讲解第一篇--向前向后
  • 力扣1287:有序数组中出现次数超过25%的元素
  • 背包DP之分组背包
  • 嵌入式通信知识串讲:从同步 / 异步传输到 UART 协议 STM32F103 硬件解析
  • ​Excel——SUMPRODUCT 函数