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

linux的make和makefile

一.什么是make和makefile

makefile作用:

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
 

make作用:

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法
 

注意点:

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
 

下面是我简单写的一个makefile文件:

通过该文件就可以实现一些便捷的命令工具。

二.make和makefile的使用与介绍

我们先试用前面的makefile中指令,再详细讲解makefile的内部知识!

1.直接make就是我们的gcc指令:

2.make+clean是我们的第二个清理指令:

现在我们再来学习内部知识:

图中第一行:

mytest1是生成的目标文件

test1.c是依赖文件列表

注意:可以多个,也可以为空

第二行:

该行是命令行,表示依赖方法,可以写多行

第三行:

表示对应的clean总是执行
所以我们可以得出:

.PHONY:XXX        表示为对应的XXX总是执行,不会出现限制

补充知识:

makefile对最新生成的内容不会再次执行!!!

例如下图:

这也是.PHONY的作用之处。

三.make和makefile的深入学习

1.替换

我们在写文件名的时候可能会觉得麻烦,所以我们可以认识以下两种替换来帮助我们便捷使用:

$---表示要执行操作符

@:表示目标文件

^:表示依赖文件列表

当我们将makefile做出以下修改时,也可以执行命令行,且执行时会自动将符号转换为文件

如下:

除了用符号来改写外,我们还可以用变量来改写:

该操作也是可以的,注意加括号即可!!!

我们再来联系我们编译和链接等操作来使用特殊的makefile:

看图:

我们可以分开进行编译链接等操作,最后得出结果

形成不同所需文件:

注意点:

如果你仔细观察会发现我们写的顺序是不符合从上到下的过程的,但是却可以执行,这是因为其可以自动推导,即自动查找:如现在对test1.o操作却没该文件,就会去后面找在返回来操作,类似递归,但是我们的第一行不能改变,其他顺序可变!!!

补充:

如果你不想每次都看执行的命令是什么,可以在前面加@

例如:

这样就不会显示执行的操作内容了。

这就是这部分的内容了,感谢大家的阅读!!!

相关文章:

  • 第三节 zookeeper基础应用与实战2
  • 单片机的省电模式及策略
  • FileZilla Server 1.8.1内网搭建
  • MySQL 基础知识(一)之数据库和 SQL 概述
  • BUUCTF misc 专题(47)[SWPU2019]神奇的二维码
  • 【初始C++】引用的概念及使用场景、引用与指针的区别、内联函数、类型推导关键字auto、范围for循环、指针空值nullptr
  • Excel+VBA处理高斯光束
  • 毕业设计vue+php幼儿园网站系统yl567
  • 【Java EE初阶十二】网络编程TCP/IP协议(二)
  • Duilib List 控件学习
  • 第三百一十回
  • ELAdmin 部署
  • String为什么是不可变的
  • LabVIEW伺服阀动静态测试系统
  • 第四篇:SQL语法-DDL-数据定义语言
  • co模块的前端实现
  • gf框架之分页模块(五) - 自定义分页
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Java IO学习笔记一
  • JS+CSS实现数字滚动
  • Lsb图片隐写
  • ng6--错误信息小结(持续更新)
  • python_bomb----数据类型总结
  • vue.js框架原理浅析
  • Vue官网教程学习过程中值得记录的一些事情
  • XML已死 ?
  • 盘点那些不知名却常用的 Git 操作
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 用Python写一份独特的元宵节祝福
  • 走向全栈之MongoDB的使用
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (14)Hive调优——合并小文件
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (南京观海微电子)——COF介绍
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Oracle存储过程编写经验和优化措施
  • (转)大型网站的系统架构
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net mvc总结
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 分布式技术比较
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net语言中的StringBuilder:入门到精通
  • .project文件
  • [ Linux ] Linux信号概述 信号的产生
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C#]winform部署PaddleOCRV3推理模型
  • [CentOs7]图形界面
  • [CISCN2019 华北赛区 Day1 Web2]ikun