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

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

一、什么是make和makefile

make是一条指令

Makefile是当前目录下的一个文件

二、makefile文件编写

依赖关系::前为要目标文件,后为其依赖的文件

依赖方法:用依赖文件生成目标文件的具体指令

简便写法:

$@:表示目标文件

$^:表示依赖文件

三、如何形成目标文件?

先将编译链接拆开成4个依赖

make后生成对应的.i .s .o的临时文件/中间文件

编译生成与写的顺序无关,扫描makefile文件时,会根据依赖关系先找到所需要的依赖文件,找到后返回原处继续执行。

make会自动推导 makefile中的所需的依赖文件

递归进行,栈式结构。

四、如何清理文件?

make后面不指定,默认执行第一条依赖关系和依赖方法

make clean指定了生成clean的依赖关系,就会执行相应的rm的依赖方法

用.PHONY修饰clean,使得总是可以clean

五、怎么判断make为最新版本?

源文件没有更新,make就没必要再一次编译。代码量较大时,比较耗时,这样可以提高编译效率

实现原理是什么? .c  .exe的更新时间不同

如何证明?

stat指令,查看3个时间(ACM时间)

文件 = 文件内容 + 文件属性

Modify:修改文件内容

Change:修改文件属性

Modify时,一般也会伴随Change和Access(具体情况具体分析)

修改内容,3个时间都改变。有时

chmod改变属性,只改变Change。为什么不改变Access?

Access访问就会修改,访问过于频繁。文件存在磁盘上,访问外设,频繁访问影响速度。

可以用touch指令手动更新时间

.c .exe对比的是Modify时间。

如果此时不能make,touch一下更新时间就可以make。

用.PHONY修饰即可跳过时间对比,总是被执行。

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

相关文章:

  • Python爬虫实战:自动化数据采集与分析
  • 视频智能分析平台EasyCVR安防视频汇聚平台助力森林公园防火安全的应用方案
  • 跨境做独立站,如何低成本引流?
  • leetcode55.跳跃游戏 【贪心】
  • 探秘C语言扫雷游戏实现技巧
  • Leetcode112. 路径总和
  • 生成12位短id,自增且不连续,永不重复,不依赖数据库
  • Zip压缩文件夹php打包函数代码
  • RISC-V交叉工具链riscv-gnu-toolchain编译
  • 我能“C“——指针进阶(上)
  • SQLServer2008数据库还原失败 恢复失败
  • 【微服务部署】04-ForwardedHeaders
  • JVM 垃圾收集器
  • CSS 样式使用link和@import有什么区别
  • LeetCode-2511-最多可以摧毁的敌人城堡数目
  • iOS开发Swift-2-图片视图、App图标-赏月App
  • node18 vue2启动报错 error:0308010C:digital envelope routines::unsupported
  • Java8实战-总结18
  • ARM编程模型-指令流水线
  • 邮件营销:高效的节日宣传方式
  • Leetcode109. 有序链表转换二叉搜索树
  • 基于Googlenet深度学习网络的人脸身份识别matlab仿真
  • vue2 生命周期,工程化开发入门
  • Elasticsearch 分布式搜索——聚合
  • 苹果将在iPhone16系列中引入微透镜阵列技术,亮度更高、功耗更低
  • Window10 安装 Lua
  • Centos替代方案分析(Ubuntu篇)
  • 关于计数以及Index返回订单号升级版可以控制年月日累计(不重复)(sqlite)
  • 前端实现在线预览文件
  • 海外有哪些流行的支付方式?