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命令

相关文章
|
7月前
|
人工智能 监控 Kubernetes
77_自动化脚本:Makefile与Airflow
在当今AI大模型时代,高效的工作流管理对于模型训练、推理和部署至关重要。随着大模型规模的不断增长和复杂度的提升,传统的手动脚本管理方式已无法满足需求。自动化脚本和工作流调度系统成为构建健壮、可重复、可扩展的LLM Pipeline的关键工具。其中,Makefile作为经典的自动化构建工具,与Airflow作为现代工作流调度平台的结合,为LLM开发团队提供了强大的工作流管理能力。
221 0
|
11月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
562 0
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
[Linux工具] Makefile
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
946 20
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
376 16
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
2274 10
|
7月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1182 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
8月前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
258 4
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
446 4