Linux项目自动化构建工具-make/makefile

简介: Linux项目自动化构建工具-make/makefile

make是一个命令

makefile是一个文件

1. 使用make自动生成gcc命令

使用 touch makefile 创建一个makefile文件

使用 vim makefile进入 vim编辑器

                                                                                                                          ⮂⮂ buffers 
  1 mytest:test.c
  2   gcc -o mytest test.c
  • 在使用gcc指令之前必须加上tab键
[yzq@VM-8-8-centos my]$ make
gcc -o mytest test.c
  • 退出vim,使用make后,会自动在当前目录下查找对应的makefile文件,再去执行内置好的gcc命令

2.依赖关系和依赖方法

mytest:test.c

mytest作为目标文件,test.c作为依赖文件列表

使用test.c形成mytest,两者称之为依赖关系

gcc -o mytest test.c 称之为依赖方法

说明makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译工具

关系和方法的解读

  • 比如说到月底你没钱了,你给你爸打电话要钱,过去后,你说 爸我是你儿子,这句话表明了你和你爸的关系即依赖关系,但若你只说了这一句话,你爸怎么知道你要干什么, 说明只有依赖关系是不可以的。
  • 若又加了句到月底了你得给我打钱,这就表明了依赖方法,这样你爸才能把钱转给你 说明同时存在正确的依赖关系和正确的依赖方法才可以实现

3. 使用make clean 删除操作

再次输入以下内容,完成删除操作

mytest:test.c
  2   gcc -o mytest test.c
  3 .PHONY:clean
  4 clean:                                                                                                                                              
  5     rm -f mytest
  • 同样在 rm -f 之前也需要加上 tab
[yzq@VM-8-8-centos my]$ make clean
rm -f mytest
  • 输入make clean 会自动生成 删除命令

clean : 解读

clean:

目标文件对应的依赖文件可以是空属于是特殊情况

冒号左边为 目标文件,冒号右边为 依赖文件列表

clean:

clean作为目标文件,依赖文件列表为空

4 .make 和make clean 解读

mytest是从上到下扫描遇到的第一个真正的目标文件

makefile从上到下扫描时,会默认执行第一组依赖关系和依赖方法

[yzq@VM-8-8-centos my]$ make
gcc -o mytest test.c
[yzq@VM-8-8-centos my]$ make clean
rm -f mytest
[yzq@VM-8-8-centos my]$ make mytest
gcc -o mytest test.c
  • 发现使用 makemake mytest 执行的方法是相同的
  • 若将clean目标文件改变第一个目标文件 即把clean放在最前面 则使用 make时,从原来的gcc命令改为 rm删除命令

5. 连续使用 make clean解读

连续使用make 会报警告,而连续使用 make clean不会

  • .PHONY : 代表总是被执行的,被修饰的称之为伪目标
    clean目标文件中含有.PHONY,clean即可称为伪目标 而mytest目标文件中不含有若将mytest目标文件加上.PHONY

  • 则可以连续输入make,同时不会有警告存在

6. 如何直到程序是最新的呢?

正常情况下,在连续输入 make,会显示如上警告

分析

正常情况下,先有源代码,才编译的可执行程序

  • 如果可执行程序最近修改时间比源代码更晚一些,说明可执行程序是最新的
    若要修改源代码,此时可执行程序一定存在了,所以源代码的最近修改时间要比可执行程序要晚

stat 指令查询

stat + 源代码/可执行程序

modify代表对内容的修改时间

有搞不懂的点击查看touch指令的修改文件的时间信息

使用stat命令 ,发现可执行程序最近修改时间比源代码要晚

解决方法

touch 源文件,若源文件存在,则将时间更到最新

此时再次可以使用 make,运行gcc命令

相关文章
|
2天前
|
Linux Shell C语言
Linux:自动化构建 - make
Linux:自动化构建 - make
10 1
|
5天前
|
安全 Linux Python
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
|
5天前
|
数据可视化 小程序 Linux
【Linux】自动化构建工具make/Makefile和git介绍
【Linux】自动化构建工具make/Makefile和git介绍
13 0
|
7天前
|
缓存 Linux
linux性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)
这些工具可以帮助你监视系统的内存使用情况、识别内存泄漏、找到高内存消耗的进程等。根据具体的问题和需求,你可以选择使用其中一个或多个工具来进行内存性能分析。注意,内存分析通常需要综合考虑多个指标和工具的输出,以便更好地理解系统的行为并采取相应的优化措施。
27 6
|
1月前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
利用Python实现基于图像识别的自动化数据采集系统
本文介绍了如何利用Python编程语言结合图像识别技术,构建一个自动化的数据采集系统。通过分析图像内容,实现对特定信息的提取和识别,并将其转化为结构化数据,从而实现高效、准确地采集需要的信息。本文将详细讨论系统的设计思路、技术实现以及应用场景。
|
2月前
|
Web App开发 Python
在ModelScope中,你可以使用Python的浏览器自动化库
在ModelScope中,你可以使用Python的浏览器自动化库
18 2
|
2月前
|
存储 BI 数据处理
Python自动化 | 解锁高效办公利器,Python助您轻松驾驭Excel!
Python自动化 | 解锁高效办公利器,Python助您轻松驾驭Excel!
|
1天前
|
JSON 监控 调度
局域网管理软件的自动化任务调度:Python 中的 APScheduler 库的应用
使用 Python 的 APScheduler 库可简化局域网管理中的自动化任务调度。APScheduler 是一个轻量级定时任务调度库,支持多种触发方式如间隔、时间、日期和 Cron 表达式。示例代码展示了如何创建每 10 秒执行一次的定时任务。在局域网管理场景中,可以利用 APScheduler 定期监控设备状态,当设备离线时自动提交数据到网站,提升管理效率。
11 0