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

编译器-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.dtcms.com/a/297418.html

相关文章:

  • 软件工程:软件需求
  • Maximator增压器DLE 5-1-GG Artikelnr.1000015617
  • 走入Linux的世界:编辑器Vim
  • WPF高级学习(一)
  • 仙人掌cacti中的RCE案例
  • 虚拟直线阈值告警人员计数算法暑期应用
  • VoWiFi技术深度解析:架构、流程与演进
  • Oracle MCP本地部署测试
  • Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?
  • CSS3新特性深度解析:Position Sticky粘性定位完整指南
  • FalconFS: Distributed File System for Large-Scale Deep Learning Pipeline——论文阅读
  • 【js(8)js深拷贝和浅拷贝】
  • 滚动提示组件
  • Vue2-VueRouter
  • [LeetCode]每日温度
  • 基于深度学习的图像分类:使用Vision Transformer(ViT)实现高效分类
  • 机器学习 KNN 算法,鸢尾花案例
  • Typecho多语言解决方案:从插件到主题的完整实现
  • 第5章 Excel公式与函数应用指南(1):公式和函数基础
  • C++ Qt6 CMake qml文件启动方式说明
  • 进阶向:基于Python的简易屏幕画笔工具
  • 萤石云替代产品摄像头方案萤石云不支持TCP本地连接-东方仙盟
  • Zabbix配置自动发现
  • 二分查找-268.丢失的数字-力扣(LeetCode)
  • 火候:烹饪的温度密码
  • DNF: Decouple and Feedback Network for Seeing in the Dark
  • Java线程基础面试复习笔记
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示
  • 高级06-Java网络编程:从Socket到HTTP
  • 数据结构3-单双链表的泛型实现及ArrayList与LinkedList的区别