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

Linux开发工具之自动化构建工具-make/Makefile

文章目录

  • 1.make/Makefile的介绍
  • 2.简单编写及使用
  • 3.ACM时间
  • 4.extern的复习
  • 5.多文件的编译
    • 5.0复习翻译过程
    • 5.1多文件的构成
    • 5.2手动编译
    • 5.3利用Makefile

1.make/Makefile的介绍

make是一个命令 makefile是一个文件[makefile也对]

之前的学习都没有维护项目结构 当有多个.c文件 先编译哪个后编译哪个 自己没管过 make/Makefile: 自动化的构建项目

编写Makefile的目的:能够自动化的构建项目 可以把我们的源代码编译 自动生成可执行程序
编写Makefile: 依赖关系(小灰灰是灰太郎的儿子 有父子关系) 依赖方法(小灰灰上大学月底给灰太狼要生活费)

2.简单编写及使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

利用编写好的Makefile 可以通过make/make clean进行生成/删除可执行程序

在这里插入图片描述

这是一个Makefile文件,用于编译名为hello的C程序。

  1. 第一行指定了一个目标,即hello。
  2. 第二行是编译命令,gcc hello.c -o hello,它会使用gcc编译hello.c,并将生成的可执行文件命名为hello。
  3. 第三行是一个伪目标,即clean,用于定义清除操作。
  4. 第四行是clean目标下的命令,rm -f hello,它用于删除生成的可执行文件hello。

可以使用命令make执行该Makefile文件来进行编译和生成可执行文件。如果需要删除可执行文件,可以使用命令make clean

执行: Makefile自顶向下扫描文本 只会执行第一对目标文件 想要执行特定文件需要在make后+文件名
.PHONY修饰的目标称为伪目标: 总是被执行的(总是根据依赖关系去执行依赖方法) 理解: 多次执行make hello 会显示: 该文件已为最新文件 而多次执行make clean则没有显示

3.ACM时间

在这里插入图片描述

ACM时间

Access: 最近一次访问 因为有些文件经常被访问 所以这个时间经常需要被修改 而频繁修改存在于磁盘上的文件需要耗费时间 所以优化后: 当达到一定访问次数才会修改access
Modify: 最近一次修改文件内容的时间 当文件内容增加/减少引起文件大小变化 – 文件的属性信息也会随之改变
Change: 最近一次修改文件属性的时间

4.extern的复习

extern是什么

extern是C语言中的一个关键字,用于在源文件中声明一个在另一个源文件中定义的变量或函数。它的作用是告诉编译器在其他地方已经定义了这个变量或函数,避免重复定义。

1.在一个源文件中声明一个在另一个源文件中定义的全局变量或函数,以便在当前源文件中使用它们。

2.在一个头文件中声明一个在另一个源文件中定义的全局变量或函数,以便在多个源文件中使用它们。

例子:

// file1.c
int count; // 定义全局变量count// file2.c
extern int count; // 声明全局变量count

file1.c定义了一个全局变量count,file2.c使用extern声明了这个全局变量,以便在file2.c中使用它。

extern关键字只是一个声明,它并不会分配内存空间。变量的实际定义和内存分配必须在某个源文件中进行。另外,如果一个变量在多个源文件中都使用了extern声明,那么它只能在其中一个源文件中进行定义

5.多文件的编译

5.0复习翻译过程

在这里插入图片描述

5.1多文件的构成

在这里插入图片描述

5.2手动编译

在这里插入图片描述

5.3利用Makefile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/224076.html

相关文章:

  • UE5蓝图接口使用方法
  • vue动态修改css样式
  • 小解List的使用【C++】
  • 自动驾驶高效预训练--降低落地成本的新思路(AD-PT)
  • Spring笔记(四)(黑马)(web层解决方案-SpringMVC)
  • 企业如何实现高效运转?工单管理系统有什么特点和优势?
  • 工业摄像机参数计算
  • Android系统中设置TextView的行间距
  • 嵌入式养成计划-47----QT--基于QT的OpenCV库实现人脸识别功能
  • MySQL(12):MySQL数据类型
  • 哪款手机便签软件支持存储录音文件并支持转文字?
  • Health Kit申请验证有问题?解决方案全解析
  • 2007-2022年上市公司工业机器人渗透度数据
  • k8s基础环境部署
  • 家用工作站方案:ThinkBook 14 2023 版
  • 电脑篇——本地串口转TCP,TCP转虚拟串口,网络调试助手,串口调试助手
  • igbt好坏判断方法有哪些?万用表怎么测试igbt的好坏?
  • Android UI 开发·界面布局开发·案例分析
  • 2023-11-06 monetdb-事务-insert-delta缓存-分析
  • ubuntu 22.04 flameshot 截图异常的问题
  • 正点原子嵌入式linux驱动开发——Linux WIFI驱动
  • React中的“状态”(state)和“属性”(props)的区别
  • 棋牌室电脑计时灯控,棋牌室计时灯控安装,佳易王计时计费管理系统软件
  • P02项目诊断报警组件(学习操作日志记录、单元测试开发)
  • 【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】
  • 服务器硬件有哪些组成
  • 【Git】Git基础命令操作速记
  • 使用CDN有什么好处?
  • 11.7加减计数器,可置位~,数字钟分秒,串转并,串累加转并,24位串并128,流水乘法器,一些乘法器
  • 【模型推理优化学习笔记】CUDA加速矩阵乘计算